๐Ÿ“ Django

Django Admin: Overview

P
Author
PyLand Team
๐Ÿ“…
Published
30.06.2026
โฑ๏ธ
Reading time
1 min
๐Ÿ‘๏ธ
Views
277
๐ŸŒฑ
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

๐Ÿ“

Search in Django

You can start with simple Django ORM filters and move to PostgreSQL features when you...

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 277
๐Ÿ“

Swagger Documentation with drf-spectacular

drf-spectacular generates an OpenAPI 3.0 schema and Swagger UI for DRF.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 561
๐Ÿ“

settings.py: Django Configuration

settings.py is the central configuration file for a Django project.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 314
๐ŸŽ“ Continue learning

Courses that cover this material

Visit the course to apply this material in practice.

Django RequestLab: from HTTP to secure production Open course curriculum