from django.db import models from django.utils import timezone from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager # Create your models here. class CustomAccountManager(BaseUserManager): def create_user(self,email,username,password,**kwargs): if not email: raise ValueError("You must provide an email") if not username: raise ValueError("You must provide an name") if not password: raise ValueError("You must provide an password") email = self.normalize_email(email) user = self.model(email=email,username=username,**kwargs) user.set_password(password) user.save() return user def create_superuser(self,email,username,password,**kwargs): kwargs.setdefault("is_staff",True) kwargs.setdefault("is_superuser",True) kwargs.setdefault("is_active",True) if kwargs['is_staff'] is not True: raise ValueError("SuperUser must have is_staff=True.") if kwargs['is_superuser'] is not True: raise ValueError("SuperUser must have is_superuser=True.") return self.create_user(email=email,username=username,password=password,**kwargs) class User(AbstractBaseUser,PermissionsMixin): email = models.EmailField(verbose_name="Email Address",primary_key=True,max_length=255,unique=True) username = models.CharField("Name",max_length=150,unique=False) joining_date = models.DateTimeField("Joining Date",default=timezone.now) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) is_active = models.BooleanField(default=True) USERNAME_FIELD = "email" REQUIRED_FIELDS = ["username"] objects = CustomAccountManager() def __str__(self): return self.username