File size: 1,910 Bytes
e7d383c
1ae15f5
e7d383c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6924b02
e7d383c
 
 
1ae15f5
e7d383c
 
6924b02
e7d383c
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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