Extending Django's default User Model
If you're starting a brand new Django project and want to modify the user model, try this - this is tricky in the sense that it has the been done step-by-step without intervention in-between.
In this case, we're adding a role
and date-of-birth (dob
) to the user model which will be changed to application_user
instead of the default auth_user
in the database's table name.
cd ~/Desktop/
mkdir user-roles
cd user-roles
python3 -m venv env
source env/bin/activate
python -m pip install --upgrade pip
pip install django
django-admin startproject myPersonalProject
cd myPersonalProject
python manage.py startup application
echo "
INSTALLED_APPS.append('application',)
AUTH_USER_MODEL = 'application.User'
" >> myPersonalProject/settings.py
echo "
from django.contrib.auth.models import AbstractUser
# from django.contrib.auth.models import Group
class User(AbstractUser):
SUPERADMIN = 0
ADMIN = 1
SALES = 2
MANAGER = 3
ROLE_CHOICES = (
(SUPERADMIN, 'Super Admin'),
(ADMIN, 'Admin'),
(SALES, 'Sales'),
(MANAGER, 'Manager'),
)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True, null=True)
dob = models.DateField(blank=True, null=True)
# hospital_group, created = Group.objects.get_or_create(name='Hospital')
# clinic_group, created = Group.objects.get_or_create(name='Clinic')
# pharmacy_group, created = Group.objects.get_or_create(name='Pharmacy')
" >> application/models.py
echo "
from .models import User
admin.site.register([User])
" >> application/admin.py
python manage.py makemigrations
python manage.py migrate
code application/models.py
Uncomment those #
s from application/models.py above because groups are created post table creations.
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
Goto : http://localhost:8000/admin/
When you try to add a user at http://localhost:8000/admin/application/user/add/ you'll see the following as additional :
Subscribe to my newsletter
Read articles from Anjanesh Lekshminarayanan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Anjanesh Lekshminarayanan
Anjanesh Lekshminarayanan
I am a web developer from Navi Mumbai working as a consultant for cloudxchange.io. Mainly dealt with LAMP stack, now into Django and trying to learn Laravel and Google Cloud. TensorFlow in the near future. Founder of nerul.in