Admin
Django · Reference cheat sheet
Admin
Django · Reference cheat sheet
📋 Overview
Django Admin is an auto-generated CRUD UI for models registered with admin.site. Enable django.contrib.admin, create a superuser, and customize list displays, filters, and search. Use it for internal ops—not as a public end-user interface.
🔧 Core concepts
| Piece | Role |
|---|---|
admin.site.register(Model, ModelAdmin) | Expose a model |
@admin.register(Model) | Decorator form |
ModelAdmin | list_display, list_filter, search_fields, readonly_fields |
InlineModelAdmin | Edit related objects on the parent page |
| Permissions | Staff + model perms; superuser bypasses |
| URLs | Included via path("admin/", admin.site.urls) |
Requires django.contrib.admin, auth, contenttypes, sessions, messages in INSTALLED_APPS.
💡 Examples
Register with list options:
# app/admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ("title", "author", "published_at", "is_published")
list_filter = ("is_published", "published_at")
search_fields = ("title", "body")
prepopulated_fields = {"slug": ("title",)}
date_hierarchy = "published_at"
ordering = ("-published_at",)Inlines:
from django.contrib import admin
from .models import Order, OrderItem
class OrderItemInline(admin.TabularInline):
model = OrderItem
extra = 1
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
inlines = [OrderItemInline]
list_display = ("id", "user", "created_at")URLs:
# config/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path("admin/", admin.site.urls),
]⚠️ Pitfalls
- Forgetting
admin.autodiscoveris fine on modern Django—apps'admin.pyload viaAppConfig. - Heavy
list_displaycallables withoutlist_select_relatedcause N+1 queries. - Exposing admin on the public internet without HTTPS, 2FA, and IP limits is risky.
- Custom user models must be registered carefully; swap before the first migration.