Django Admin – Create User: A Step-by-Step Guide

Last updated 4 months, 3 weeks ago | 367 views 75     5

Tags:- Python Django

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 and add_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.