📝 Django

Django Admin: Overview

P
Author
Pyland
📅
Published
30.06.2026
⏱️
Reading time
1 min
👁️
Views
86
🌱
Level
Beginner

Django Admin is a built-in management panel for working with data through a browser.

Registering a Model

# admin.py
from django.contrib import admin
from .models import Task, Project

admin.site.register(Task)
admin.site.register(Project)

The models are now accessible at /admin/.

ModelAdmin — Display Configuration

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_display = ['title', 'status', 'owner', 'created_at']
    list_filter = ['status', 'priority']
    search_fields = ['title', 'owner__username']
    ordering = ['-created_at']
    date_hierarchy = 'created_at'

list_display and list_editable

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_display = ['title', 'status', 'priority']
    list_editable = ['status', 'priority']  # edit directly in the list

fieldsets — Field Grouping

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    fieldsets = [
        ('General', {'fields': ['title', 'description']}),
        ('Parameters', {'fields': ['status', 'priority', 'owner', 'project']}),
        ('Dates', {'fields': ['due_date'], 'classes': ['collapse']}),
    ]

search_fields and list_filter

search_fields — full-text search across the specified fields. Supports traversing relations (owner__username). Django adds a LIKE query for each field.

list_filter — a sidebar with filters. Works with choice fields, boolean fields, ForeignKey, and dates.

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    search_fields = ['title', 'description', 'owner__email']
    list_filter = ['status', 'priority', 'project', 'created_at']

readonly_fields

Read-only fields are shown on the edit page but don’t accept input:

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    readonly_fields = ['created_at', 'updated_at', 'slug']
    fieldsets = [
        ('General', {'fields': ['title', 'description']}),
        ('System', {'fields': ['slug', 'created_at', 'updated_at']}),
    ]

Useful for auto-generated fields that shouldn’t be edited manually.

Custom Actions

Actions are applied to selected objects in the list. Example — bulk status change:

@admin.action(description='Mark as completed')
def mark_done(modeladmin, request, queryset):
    queryset.update(status='done')

@admin.action(description='Mark as cancelled')
def mark_cancelled(modeladmin, request, queryset):
    queryset.update(status='cancelled')

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_display = ['title', 'status']
    actions = [mark_done, mark_cancelled]

After registration, actions appear in the dropdown above the object list. The user selects rows, chooses an action, and clicks “Go”.

save_model — Intercept Saves

save_model is called when an object is saved through Admin. Use it to add logic: set the author, send a notification, write a log:

@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if not change:
            # New object — set the owner
            obj.owner = request.user
        super().save_model(request, obj, form, change)

The change parameter: False — creating a new object, True — editing an existing one.

Creating a Superuser

python manage.py createsuperuser

Then open /admin/ and log in with the credentials you created.

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

pytest-django: Testing Django

Охватываемые темы: Installation, @pytest.mark.djangodb, Fixtures, Testing views.

📅 30.06.2026 👁️ 132
📝

Django: Template Tags

Template tags are logic inside HTML. Unlike {{ variable }} which only outputs a value,...

📅 30.06.2026 👁️ 85
📝

Django: Static Files

Static files are CSS, JavaScript, images, and fonts. Django handles them in a specific way:...

📅 30.06.2026 👁️ 73

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!