To extend the User model with custom fields in Python Django, we can extend the AbstractBaseUser
class.
For instance, we write
from django.db import models
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser
)
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['date_of_birth']
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their email address
return self.email
def __unicode__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
to create the MyUser
model class which is a child of the AbstractBaseUser
model class.
In it, we add new fields and methods which we use as computed properties that combines values from other class fields.
We have the email,
date_of_birth,
is_active, and
is_admin` fields.
And the class methods are computed properties.