You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/comments/admin.py

107 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 赵瑞萍评论模型后台管理配置模块用于自定义Django Admin评论管理界面
# 功能:配置评论列表展示、筛选、批量操作及自定义字段,支持国际化和快速跳转关联数据
# 核心特性:批量启用/禁用评论、作者/文章快速跳转、列表字段自定义显示
from django.contrib import admin
from django.urls import reverse # 用于反向生成Admin页面URL
from django.utils.html import format_html # 用于安全渲染HTML链接避免XSS风险
from django.utils.translation import gettext_lazy as _ # 用于后台字段名称国际化翻译
from django.contrib.admin.models import LogEntry, ADDITION # 新增导入
from django.contrib.contenttypes.models import ContentType # 新增导入
# 赵瑞萍:自定义批量操作函数——禁用选中的评论
def disable_commentstatus(modeladmin, request, queryset):
# 赵瑞萍将选中评论的is_enable字段批量更新为False实现批量隐藏评论
queryset.update(is_enable=False)
# 赵瑞萍:自定义批量操作函数——启用选中的评论
def enable_commentstatus(modeladmin, request, queryset):
# 赵瑞萍将选中评论的is_enable字段批量更新为True实现批量显示评论
queryset.update(is_enable=True)
# 赵瑞萍:为批量操作设置后台显示名称,支持国际化翻译
disable_commentstatus.short_description = _('Disable comments')
enable_commentstatus.short_description = _('Enable comments')
class CommentAdmin(admin.ModelAdmin):
"""
赵瑞萍评论模型的Admin配置类控制Django后台评论管理界面的各项功能
包括列表展示字段、分页、筛选、编辑页字段、批量操作等配置
"""
# 赵瑞萍列表页分页配置每页显示20条评论避免数据过多导致加载缓慢
list_per_page = 20
# 赵瑞萍:列表页显示的字段,包含基础字段和自定义跳转字段
list_display = (
'id', # 评论唯一ID用于快速标识
'body', # 评论正文内容,直观查看评论信息
'link_to_userinfo', # 自定义字段:评论作者的后台编辑页链接
'link_to_article', # 自定义字段:评论所属文章的后台编辑页链接
'is_enable', # 评论显示状态,快速判断是否启用
'creation_time' # 评论创建时间,追溯评论发布时间
)
# 赵瑞萍:列表页中可点击跳转至编辑页的字段,方便快速编辑
list_display_links = ('id', 'body', 'is_enable')
# 赵瑞萍右侧筛选器配置按评论显示状态is_enable筛选快速筛选启用/禁用评论
list_filter = ('is_enable',)
# 赵瑞萍:编辑页排除的字段,创建时间和最后修改时间不允许手动修改,由系统自动维护
exclude = ('creation_time', 'last_modify_time')
# 赵瑞萍:注册批量操作函数,在列表页提供"禁用评论"和"启用评论"的批量操作按钮
actions = [disable_commentstatus, enable_commentstatus]
def link_to_userinfo(self, obj):
"""
赵瑞萍:自定义列表字段,生成评论作者的后台编辑页链接
实现从评论直接跳转至作者详情页,方便关联数据管理
参数obj当前评论对象
返回安全渲染的HTML链接标签
"""
# 赵瑞萍获取作者模型的app标签和模型名称用于反向生成URL
info = (obj.author._meta.app_label, obj.author._meta.model_name)
# 赵瑞萍反向生成作者模型的后台编辑页URL传入作者ID作为参数
link = reverse('admin:%s_%s_change' % info, args=(obj.author.id,))
# 赵瑞萍渲染HTML链接优先显示作者昵称无昵称则显示邮箱确保显示有意义的信息
return format_html(
u'<a href="%s">%s</a>' %
(link, obj.author.nickname if obj.author.nickname else obj.author.email)
)
def link_to_article(self, obj):
"""
赵瑞萍:自定义列表字段,生成评论所属文章的后台编辑页链接
实现从评论直接跳转至文章详情页,方便关联数据核查
参数obj当前评论对象
返回安全渲染的HTML链接标签
"""
# 赵瑞萍获取文章模型的app标签和模型名称用于反向生成URL
info = (obj.article._meta.app_label, obj.article._meta.model_name)
# 赵瑞萍反向生成文章模型的后台编辑页URL传入文章ID作为参数
link = reverse('admin:%s_%s_change' % info, args=(obj.article.id,))
# 赵瑞萍渲染HTML链接显示文章标题直观标识关联文章
return format_html(u'<a href="%s">%s</a>' % (link, obj.article.title))
# 赵瑞萍:为自定义字段设置后台显示名称,支持国际化翻译,适配多语言环境
link_to_userinfo.short_description = _('User')
link_to_article.short_description = _('Article')
def enable_commentstatus(modeladmin, request, queryset):
queryset.update(is_enable=True)
# 记录操作日志
content_type = ContentType.objects.get_for_model(queryset.model)
for obj in queryset:
LogEntry.objects.create(
user_id=request.user.id,
content_type_id=content_type.id,
object_id=obj.id,
object_repr=str(obj),
action_flag=ADDITION,
change_message="批量启用评论"
)