text: from django.db import models
  from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser
  from django.contrib.auth.models import PermissionsMixin
  
  # Create your models here.
  
  class UserManager(BaseUserManager):
  
      def get_by_natural_key(self, email):
          return self.get(email=email)
  
      def create_user(self, email, password=None, **extra_fields):
  
          if email is None:
              raise TypeError('Users must have an email address.')
  
          if password is None:
              raise TypeError('Superusers must have a password.')
  
          extra_fields.setdefault('is_staff', True)
  
          user=self.model(email=self.normalize_email(email), **extra_fields)
          user.set_password(password)
  
          user.save()
  
          return user
  
      def create_superuser(self, email, password, **extra_fields):
          """
          Create and return a `User` with superuser (admin) permissions.
          """
  
          extra_fields.setdefault('is_staff', True)
          extra_fields.setdefault('is_superuser', True)
          extra_fields.setdefault('is_active', True)
  
          if password is None:
              raise TypeError('Superusers must have a password.')
  
          if extra_fields.get('is_staff') is not True:
              raise ValueError('Superuser must have is_staff=True.')
          if extra_fields.get('is_superuser') is not True:
              raise ValueError('Superuser must have is_superuser=True.')
          return self.create_user(email, password, **extra_fields)
  
  
  class User(AbstractBaseUser, PermissionsMixin):
      username = None
      email = models.EmailField(max_length=255, unique=True)
  
  
      USERNAME_FIELD = 'email'
      REQUIRED_FIELDS = []
  
      objects = UserManager()
  
  
      name = models.CharField(max_length=255)
      password = models.CharField(max_length=255)
      phone = models.IntegerField(null=True)
      is_premium = models.BooleanField(default=False)
      is_active = models.BooleanField(default=True)
      is_staff = models.BooleanField(default=False)
  
  
      def __str__(self):
          return self.email
  
  