Django Admin – Create User: A Step-by-Step Guide
Last updated 4 months, 3 weeks ago | 367 views 75 5

Introduction
Django includes a robust authentication system, and the Django Admin provides an intuitive interface to manage users. While the default interface allows superusers to create and manage users, many developers often need to customize user creation or add additional fields.
This guide walks through:
-
Creating users via Django Admin.
-
Customizing the User model (if needed).
-
Customizing the admin form for user creation.
-
Adding validations and form behavior.
-
Complete code example.
-
Tips and pitfalls.
Prerequisites
-
Django installed (
pip install django
) -
A Django project and app created
-
The
django.contrib.admin
app enabled
✅ Step-by-Step: Creating Users via Django Admin
Step 1: Use Django’s Built-in User Model (Optional)
You can use Django’s built-in User
model or create a custom user model.
If using default user model:
In settings.py
, no special configuration is needed.
If using custom user model (recommended for extensibility):
# myapp/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
# settings.py
AUTH_USER_MODEL = 'myapp.CustomUser'
Step 2: Create a Custom User Creation Form
Create a custom form for user creation that matches your user model.
# myapp/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ('username', 'email', 'age')
Step 3: Customize the Admin Interface
# myapp/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
from .forms import CustomUserCreationForm
from django.contrib.auth.forms import UserChangeForm
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = UserChangeForm
model = CustomUser
list_display = ('username', 'email', 'is_staff', 'age')
list_filter = ('is_staff', 'is_superuser', 'groups')
search_fields = ('username', 'email')
ordering = ('username',)
fieldsets = (
(None, {'fields': ('username', 'email', 'password')}),
('Personal Info', {'fields': ('age',)}),
('Permissions', {'fields': ('is_staff', 'is_superuser', 'groups')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'email', 'age', 'password1', 'password2', 'is_staff', 'is_superuser')}
),
)
admin.site.register(CustomUser, CustomUserAdmin)
Step 4: Apply Migrations
python manage.py makemigrations
python manage.py migrate
Step 5: Create Superuser to Access Admin
python manage.py createsuperuser
Step 6: Run the Server and Create Users
python manage.py runserver
Visit http://127.0.0.1:8000/admin, log in, and go to the Users section. You can now create users using the custom form.
Tips
-
Use
AUTH_USER_MODEL
from the start of your project if you plan to customize the user model. Changing it later is difficult. -
Use custom forms to control field visibility, validation, and layout.
-
Add custom validators to ensure data integrity (e.g., unique email, valid age).
-
Group related fields using
fieldsets
andadd_fieldsets
for clarity.
⚠️ Common Pitfalls
Pitfall | Fix |
---|---|
Forgetting to update AUTH_USER_MODEL |
Always declare it at the top of your settings.py . |
Using the default UserAdmin with a custom user model |
Subclass UserAdmin and register your custom user admin class. |
Not including custom fields in add_fieldsets |
Add them to both fieldsets and add_fieldsets in the admin class. |
Missing migrations | Run makemigrations and migrate after model changes. |
Complete Code Example
models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ('username', 'email', 'age')
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm
from .models import CustomUser
from .forms import CustomUserCreationForm
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = UserChangeForm
model = CustomUser
list_display = ('username', 'email', 'is_staff', 'age')
list_filter = ('is_staff', 'is_superuser', 'groups')
search_fields = ('username', 'email')
ordering = ('username',)
fieldsets = (
(None, {'fields': ('username', 'email', 'password')}),
('Personal Info', {'fields': ('age',)}),
('Permissions', {'fields': ('is_staff', 'is_superuser', 'groups')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'email', 'age', 'password1', 'password2', 'is_staff', 'is_superuser')}
),
)
admin.site.register(CustomUser, CustomUserAdmin)
settings.py
AUTH_USER_MODEL = 'myapp.CustomUser'
✅ Conclusion
Creating users via Django Admin becomes more powerful when you customize it to fit your application's needs. With a custom user model and admin forms, you can build a clean, secure, and efficient user management system directly within the Django admin panel.
Whether you're building a blog, e-commerce site, or enterprise portal, properly managing user creation in the admin is a foundational skill that scales with your project.