#zf:导入Django表单模块 from django import forms #zf:导入Django管理后台模块 from django.contrib import admin #zf:导入获取用户模型的函数 from django.contrib.auth import get_user_model #zf:导入URL反向解析函数 from django.urls import reverse #zf:导入HTML格式化函数 from django.utils.html import format_html #zf:导入国际化翻译函数 from django.utils.translation import gettext_lazy as _ #zf:导入博客应用的Article模型 from .models import Article #zf:定义文章表单类,继承自ModelForm class ArticleForm(forms.ModelForm): #zf:被注释掉的代码:使用AdminPagedownWidget作为body字段的widget # body = forms.CharField(widget=AdminPagedownWidget()) class Meta: model = Article #zf:包含所有字段 fields = '__all__' #zf:定义批量发布文章的操作函数 def makr_article_publish(modeladmin, request, queryset): #zf:将选中文章的状态更新为'p'(已发布) queryset.update(status='p') #zf:定义批量将文章设为草稿的操作函数 def draft_article(modeladmin, request, queryset): #zf:将选中文章的状态更新为'd'(草稿) queryset.update(status='d') #zf:定义批量关闭文章评论的操作函数 def close_article_commentstatus(modeladmin, request, queryset): #zf:将选中文章的评论状态更新为'c'(关闭) queryset.update(comment_status='c') #zf:定义批量开启文章评论的操作函数 def open_article_commentstatus(modeladmin, request, queryset): #zf:将选中文章的评论状态更新为'o'(开启) queryset.update(comment_status='o') #zf:为操作函数设置描述信息,用于在管理后台显示(支持国际化) makr_article_publish.short_description = _('Publish selected articles') draft_article.short_description = _('Draft selected articles') close_article_commentstatus.short_description = _('Close article comments') open_article_commentstatus.short_description = _('Open article comments') #zf:定义文章管理类,继承自ModelAdmin class ArticlelAdmin(admin.ModelAdmin): #zf:每页显示20条记录 list_per_page = 20 #zf:设置可搜索的字段为body和title search_fields = ('body', 'title') #zf:使用自定义的ArticleForm form = ArticleForm #zf:设置在列表页显示的字段 list_display = ( 'id', 'title', 'author', #zf:自定义的分类链接字段 'link_to_category', 'creation_time', 'views', 'status', 'type', 'article_order') #zf:设置哪些字段可以作为链接点击进入编辑页 list_display_links = ('id', 'title') #zf:设置右侧的过滤器字段 list_filter = ('status', 'type', 'category') #zf:对tags字段使用水平过滤器 filter_horizontal = ('tags',) #zf:在表单中排除这些字段(由系统自动管理) exclude = ('creation_time', 'last_modify_time') #zf:启用"在站点上查看"功能 view_on_site = True #zf:注册自定义的管理操作 actions = [ makr_article_publish, draft_article, close_article_commentstatus, open_article_commentstatus] #zf:自定义字段:显示分类链接 def link_to_category(self, obj): #zf:获取分类模型的app_label和model_name info = (obj.category._meta.app_label, obj.category._meta.model_name) #zf:生成分类编辑页的URL link = reverse('admin:%s_%s_change' % info, args=(obj.category.id,)) #zf:返回HTML链接 return format_html(u'%s' % (link, obj.category.name)) #zf:设置字段显示名称 link_to_category.short_description = _('category') #zf:自定义表单获取方法 def get_form(self, request, obj=None, **kwargs): form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs) #zf:限制作者字段只能选择超级用户 form.base_fields['author'].queryset = get_user_model( ).objects.filter(is_superuser=True) return form #zf:保存模型的方法 def save_model(self, request, obj, form, change): super(ArticlelAdmin, self).save_model(request, obj, form, change) #zf:获取在站点上查看的URL def get_view_on_site_url(self, obj=None): if obj: #zf:获取文章的完整URL url = obj.get_full_url() return url else: from djangoblog.utils import get_current_site #zf:获取当前站点域名 site = get_current_site().domain return site #zf:定义标签管理类 class TagAdmin(admin.ModelAdmin): #zf:排除这些字段(由系统自动管理) exclude = ('slug', 'last_mod_time', 'creation_time') #zf:定义分类管理类 class CategoryAdmin(admin.ModelAdmin): #zf:设置在列表页显示的字段 list_display = ('name', 'parent_category', 'index') #zf:排除这些字段(由系统自动管理) exclude = ('slug', 'last_mod_time', 'creation_time') #zf:定义链接管理类 class LinksAdmin(admin.ModelAdmin): #zf:排除这些字段(由系统自动管理) exclude = ('last_mod_time', 'creation_time') #zf:定义侧边栏管理类 class SideBarAdmin(admin.ModelAdmin): #zf:设置在列表页显示的字段 list_display = ('name', 'content', 'is_enable', 'sequence') #zf:排除这些字段(由系统自动管理) exclude = ('last_mod_time', 'creation_time') #zf:定义博客设置管理类 class BlogSettingsAdmin(admin.ModelAdmin): #zf:没有特殊配置 pass #zf:注册模型到管理后台 #zf:注意:在你提供的代码中,模型注册部分被省略了,通常应该包含如下代码: #zf:admin.site.register(Article, ArticlelAdmin) #zf:admin.site.register(Tag, TagAdmin) #zf:admin.site.register(Category, CategoryAdmin) #zf:admin.site.register(Links, LinksAdmin) #zf:admin.site.register(SideBar, SideBarAdmin) #zf:admin.site.register(BlogSettings, BlogSettingsAdmin)