Registering Models in Admin
Django admin gives you a ready-made interface for managing your data. Register a model to make it visible in the admin site.
from django.contrib import admin
from .models import Article
admin.site.register(Article)
This gives you a basic admin page for the Article model with default behavior. For more control, use a ModelAdmin class.
Customizing with ModelAdmin
The ModelAdmin class lets you customize how a model appears in the admin interface.
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'created_at', 'is_published']
list_filter = ['is_published', 'author']
search_fields = ['title', 'content']
readonly_fields = ['created_at']
admin.site.register(Article, ArticleAdmin)
list_display controls which columns appear in the list view. list_filter adds sidebar filters. search_fields enables a search box.
Using Inlines for Related Models
Inlines let you edit related models on the same page as the parent model.
from django.contrib import admin
from .models import Article, Comment
class CommentInline(admin.TabularInline):
model = Comment
extra = 1
class ArticleAdmin(admin.ModelAdmin):
inlines = [CommentInline]
admin.site.register(Article, ArticleAdmin)
Use TabularInline for a compact layout or StackedInline for a more spacious one. The extra field controls how many empty forms appear.
Admin Actions and Custom Methods
You can add custom actions and methods to the admin interface.
from django.contrib import admin
from .models import Article
@admin.action(description='Mark selected articles as published')
def make_published(modeladmin, request, queryset):
queryset.update(is_published=True)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'is_published']
actions = [make_published]
admin.site.register(Article, ArticleAdmin)
Custom actions appear in the admin dropdown. You can also add custom buttons and methods using changeform_view or changelist_view.
Advanced Admin Customization
You can further customize the admin with fieldsets, prepopulated fields, and date hierarchies.
class ArticleAdmin(admin.ModelAdmin):
fieldsets = [
('Content', {'fields': ['title', 'content']}),
('Metadata', {'fields': ['author', 'created_at'], 'classes': ['collapse']}),
]
prepopulated_fields = {'slug': ('title',)}
date_hierarchy = 'created_at'
ordering = ['-created_at']
fieldsets organize the edit form into sections. prepopulated_fields auto-fills values. date_hierarchy adds a date-based navigation.