from django.contrib import admin from .models import BlogPost, BlogCategory, BlogAuthor, BlogTag, BlogComment @admin.register(BlogAuthor) class BlogAuthorAdmin(admin.ModelAdmin): list_display = ['name', 'email', 'is_active', 'created_at'] list_filter = ['is_active', 'created_at'] search_fields = ['name', 'email'] ordering = ['name'] @admin.register(BlogCategory) class BlogCategoryAdmin(admin.ModelAdmin): list_display = ['title', 'slug', 'display_order', 'is_active', 'posts_count'] list_filter = ['is_active'] search_fields = ['title', 'slug'] prepopulated_fields = {'slug': ('title',)} ordering = ['display_order', 'title'] def posts_count(self, obj): return obj.posts.count() posts_count.short_description = 'Posts Count' @admin.register(BlogTag) class BlogTagAdmin(admin.ModelAdmin): list_display = ['name', 'slug', 'is_active', 'posts_count'] list_filter = ['is_active'] search_fields = ['name', 'slug'] prepopulated_fields = {'slug': ('name',)} ordering = ['name'] def posts_count(self, obj): return obj.posts.count() posts_count.short_description = 'Posts Count' @admin.register(BlogPost) class BlogPostAdmin(admin.ModelAdmin): list_display = [ 'title', 'author', 'category', 'published', 'featured', 'views_count', 'published_at' ] list_filter = [ 'published', 'featured', 'category', 'author', 'published_at', 'created_at' ] search_fields = ['title', 'content', 'excerpt'] prepopulated_fields = {'slug': ('title',)} filter_horizontal = ['tags'] date_hierarchy = 'published_at' ordering = ['-published_at', '-created_at'] fieldsets = ( ('Basic Information', { 'fields': ('title', 'slug', 'author', 'category') }), ('Content', { 'fields': ('excerpt', 'content') }), ('Images', { 'fields': ('thumbnail', 'thumbnail_url', 'featured_image', 'featured_image_url') }), ('Categorization', { 'fields': ('tags',) }), ('SEO', { 'fields': ('meta_description', 'meta_keywords'), 'classes': ('collapse',) }), ('Status & Visibility', { 'fields': ('published', 'featured', 'reading_time', 'published_at') }), ('Statistics', { 'fields': ('views_count',), 'classes': ('collapse',) }), ) readonly_fields = ['views_count'] @admin.register(BlogComment) class BlogCommentAdmin(admin.ModelAdmin): list_display = ['name', 'post', 'is_approved', 'created_at'] list_filter = ['is_approved', 'created_at'] search_fields = ['name', 'email', 'content', 'post__title'] ordering = ['-created_at'] actions = ['approve_comments', 'disapprove_comments'] def approve_comments(self, request, queryset): queryset.update(is_approved=True) approve_comments.short_description = "Approve selected comments" def disapprove_comments(self, request, queryset): queryset.update(is_approved=False) disapprove_comments.short_description = "Disapprove selected comments"