from django.contrib import admin
from django.utils.html import format_html
from .models import Post, Comment
class CommentInline(admin.TabularInline):
model = Comment
extra = 0
readonly_fields = ['author', 'created_at']
can_delete = False
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'status', 'comment_count', 'published_at']
list_filter = ['status', 'created_at', 'author']
search_fields = ['title', 'content']
readonly_fields = ['created_at', 'updated_at']
date_hierarchy = 'published_at'
fieldsets = [
('Content', {
'fields': ['title', 'content', 'author']
}),
('Publishing', {
'fields': ['status', 'published_at']
}),
('Metadata', {
'fields': ['created_at', 'updated_at'],
'classes': ['collapse']
}),
]
inlines = [CommentInline]
@admin.display(description='Comments')
def comment_count(self, obj):
count = obj.comments.count()
return format_html('<strong>{}</strong>', count)
def get_queryset(self, request):
"""Optimize queries."""
return super().get_queryset(request).select_related('author').prefetch_related('comments')
actions = ['publish_posts']
@admin.action(description='Publish selected posts')
def publish_posts(self, request, queryset):
updated = queryset.update(status='published')
self.message_user(request, f'{updated} posts published successfully.')