Custom User Modal Creation in Django
Hi, Welcome back Techy Mind...
In this Discussion, I'm going to chew over on Custom User Modal...
Let's flow as points:
1: We have to import some keys as below.
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, User
2: Now we have to create a function by extending the keys with the named Account (as preferred) and add only the required field but i have something to say we will get some fields even though not added in the modal, like password and is_superuser.
from django_mysql.models import EnumField
class Account(AbstractBaseUser, PermissionsMixin):
name = models.CharField(max_length=255, null=False, verbose_name="Full Name")
user_name = models.CharField(max_length=255, null=False, verbose_name="User Name")
email = models.EmailField(max_length=60, null=True, blank=True, verbose_name="Email")
token_id = models.TextField(null=True, blank=True)
mobile_number = models.CharField(max_length=10, null=False,unique=True, verbose_name="Mobile")
last_login = models.DateTimeField(auto_now=True)
EXIST_CHOICES = [
('1', '1'),
('0', '0')
]
is_blocked = EnumField(choices = EXIST_CHOICES, default='0')
is_active = EnumField(choices = EXIST_CHOICES, default='1')
is_exists = EnumField(choices = EXIST_CHOICES, default='1')
created_datetime = models.DateTimeField(auto_now_add=True)
updated_datetime = models.DateTimeField(auto_now=True)
USERNAME_FIELD = 'mobile_number'
REQUIRED_FIELDS = ['name']
objects = MyUserManager()
class Meta:
db_table = 'user'
unique_together = [ 'mobile_number']
#i made mobile_number as unique
def __str__(self):
return self.name
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
3: After creating Modal we have to create a UserManager class with the name MyUserManager(BaseUserManager)
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, User
# Create your models here.
class MyUserManager(BaseUserManager):
def create_user(self, email, name, mobile_number,username):
if not name:
raise ValueError('Name cannot be empty')
if not mobile_number:
raise ValueError('Mobile cannot be empty')
user = self.model(
email = self.normalize_email(email),
name = name,
user_name= username,
mobile_number = mobile_number
)
if password:
user.set_password(password)
user.is_active = 1
user.is_superuser = 0
user.save(using=self._db)
return user
def create_superuser(self, email='', name='', mobile_number='', password=''):
# converts email charecters to lower case
user = self.model(email=self.normalize_email(email), name=name, mobile_number = mobile_number, password=password)
user.is_admin = 1
user.is_active = 1
user.is_staff = 1
user.is_superuser = 1
role_id = Role.objects.get(id=1)
user.role_id = role_id
user.set_password(password)
user.save(using=self._db)
return user
def create_admin(self, email='', name='', mobile='', password=''):
# converts email charecters to lower case
user = self.model(email=self.normalize_email(email), name=name, mobile = mobile, password=password)
user.is_admin = 1
user.is_active = 1
user.is_staff = 1
user.is_superuser = 0
user_role = UserRole.objects.get(id=1)
user.user_type = user_role
user.set_password(password)
user.save(using=self._db)
return user
4: Then makemigrations and migrate...
Print("Thank You!")
output:
Thank You!
