Django
Beginner
1 min read
Admin Actions and Inlines
Example
# blog/admin.py — actions, inlines, and fieldsets
from django.contrib import admin
from django.utils import timezone
from .models import Post, Comment
# --- Inline for comments ---
class CommentInline(admin.TabularInline):
model = Comment
extra = 0
readonly_fields = ['author', 'body', 'created_at']
can_delete = True
# --- Custom admin action ---
@admin.action(description='Mark selected posts as published')
def make_published(modeladmin, request, queryset):
updated = queryset.update(status=Post.STATUS_PUBLISHED, published_at=timezone.now())
modeladmin.message_user(request, f'{updated} post(s) marked as published.')
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
actions = [make_published]
inlines = [CommentInline]
fieldsets = (
(None, {
'fields': ('title', 'slug', 'author', 'category', 'tags'),
}),
('Content', {
'fields': ('body', 'cover_img'),
}),
('Publishing', {
'classes': ('collapse',),
'fields': ('status', 'published_at'),
}),
)
readonly_fields = ['created_at', 'updated_at']
Related Resources
Django Reference
Complete tag & property list
Django How-To Guides
Step-by-step practical guides
Django Exercises
Practice what you've learned
More in Django