160 lines
5.0 KiB
Python
160 lines
5.0 KiB
Python
from django.contrib import admin
|
|
from django.utils.html import format_html
|
|
from .models import Artwork, Category, About, Comment
|
|
|
|
|
|
class CategoryAdmin(admin.ModelAdmin):
|
|
list_display = ('name', 'slug', 'created_at', 'updated_at')
|
|
list_filter = ('created_at', 'updated_at')
|
|
search_fields = ('name', 'slug')
|
|
prepopulated_fields = {'slug': ('name',)}
|
|
ordering = ('name',)
|
|
|
|
|
|
class ArtworkAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
'title',
|
|
'category',
|
|
'order',
|
|
'view_count',
|
|
'created_at',
|
|
'thumbnail_preview'
|
|
)
|
|
list_filter = ('category', 'created_at')
|
|
search_fields = ('title', 'description', 'slug')
|
|
list_editable = ('order',)
|
|
prepopulated_fields = {'slug': ('title',)}
|
|
ordering = ('order', '-created_at')
|
|
readonly_fields = ('view_count', 'created_at', 'updated_at', 'image_preview')
|
|
fieldsets = (
|
|
('基本信息', {
|
|
'fields': ('title', 'slug', 'description', 'category')
|
|
}),
|
|
('图片设置', {
|
|
'fields': ('image', 'image_preview', 'thumbnail')
|
|
}),
|
|
('排序与统计', {
|
|
'fields': ('order', 'view_count')
|
|
}),
|
|
('时间信息', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
def thumbnail_preview(self, obj):
|
|
if obj.thumbnail:
|
|
return format_html(
|
|
'<img src="{}" style="max-height: 50px; max-width: 50px;" />',
|
|
obj.thumbnail.url
|
|
)
|
|
return "-"
|
|
thumbnail_preview.short_description = '缩略图'
|
|
|
|
def image_preview(self, obj):
|
|
if obj.image:
|
|
return format_html(
|
|
'<img src="{}" style="max-height: 200px; max-width: 200px;" />',
|
|
obj.image.url
|
|
)
|
|
return "-"
|
|
image_preview.short_description = '图片预览'
|
|
|
|
|
|
class AboutAdmin(admin.ModelAdmin):
|
|
list_display = ('title', 'created_at', 'updated_at')
|
|
readonly_fields = ('created_at', 'updated_at', 'image_preview')
|
|
fieldsets = (
|
|
('内容', {
|
|
'fields': ('title', 'content', 'image')
|
|
}),
|
|
('预览', {
|
|
'fields': ('image_preview',),
|
|
'classes': ('collapse',)
|
|
}),
|
|
('时间信息', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
def image_preview(self, obj):
|
|
if obj.image:
|
|
return format_html(
|
|
'<img src="{}" style="max-height: 200px; max-width: 200px;" />',
|
|
obj.image.url
|
|
)
|
|
return "-"
|
|
image_preview.short_description = '图片预览'
|
|
|
|
def has_add_permission(self, request):
|
|
# 只允许有一个关于页面
|
|
if About.objects.exists():
|
|
return False
|
|
return super().has_add_permission(request)
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
# 不允许删除关于页面
|
|
return False
|
|
|
|
|
|
class CommentAdmin(admin.ModelAdmin):
|
|
"""评论管理"""
|
|
|
|
list_display = ['id', 'user', 'artwork', 'text_preview', 'has_image', 'created_at', 'is_active']
|
|
list_filter = ['artwork', 'user', 'is_active', 'created_at']
|
|
search_fields = ['text', 'user__username', 'artwork__title']
|
|
list_editable = ['is_active']
|
|
list_per_page = 20
|
|
|
|
fieldsets = (
|
|
('基本信息', {
|
|
'fields': ('artwork', 'user', 'is_active')
|
|
}),
|
|
('评论内容', {
|
|
'fields': ('text', 'image')
|
|
}),
|
|
('时间信息', {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
readonly_fields = ('created_at', 'updated_at')
|
|
|
|
def text_preview(self, obj):
|
|
"""文本内容预览"""
|
|
if obj.text:
|
|
return obj.text[:50] + '...' if len(obj.text) > 50 else obj.text
|
|
return '-'
|
|
text_preview.short_description = '评论内容'
|
|
|
|
def has_image(self, obj):
|
|
"""是否有图片"""
|
|
return bool(obj.image)
|
|
has_image.short_description = '有图片'
|
|
has_image.boolean = True
|
|
|
|
actions = ['activate_comments', 'deactivate_comments']
|
|
|
|
def activate_comments(self, request, queryset):
|
|
"""批量激活评论"""
|
|
updated = queryset.update(is_active=True)
|
|
self.message_user(request, f'已激活 {updated} 条评论')
|
|
activate_comments.short_description = '激活选中评论'
|
|
|
|
def deactivate_comments(self, request, queryset):
|
|
"""批量停用评论"""
|
|
updated = queryset.update(is_active=False)
|
|
self.message_user(request, f'已停用 {updated} 条评论')
|
|
deactivate_comments.short_description = '停用选中评论'
|
|
|
|
|
|
admin.site.register(Category, CategoryAdmin)
|
|
admin.site.register(Artwork, ArtworkAdmin)
|
|
admin.site.register(About, AboutAdmin)
|
|
admin.site.register(Comment, CommentAdmin)
|
|
|
|
# 自定义管理站点标题
|
|
admin.site.site_header = 'Yitao-Ren Gallery 管理后台'
|
|
admin.site.site_title = '画廊管理'
|
|
admin.site.index_title = '欢迎使用画廊管理后台' |