parent
290d1fad9a
commit
deb2fa6a9b
@ -0,0 +1,131 @@
|
||||
from django import forms
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.urls import reverse
|
||||
from django.utils.html import format_html
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# Register your models here.
|
||||
from .models import Article
|
||||
|
||||
|
||||
class ArticleForm(forms.ModelForm):
|
||||
# body = forms.CharField(widget=AdminPagedownWidget())
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
# 管理员动作函数 - 发布选中文章
|
||||
def makr_article_publish(modeladmin, request, queryset):
|
||||
"""将选中的文章状态设置为已发布"""
|
||||
queryset.update(status='p')
|
||||
|
||||
|
||||
# 管理员动作函数 - 将选中文章设为草稿
|
||||
def draft_article(modeladmin, request, queryset):
|
||||
"""将选中的文章状态设置为草稿"""
|
||||
queryset.update(status='d')
|
||||
|
||||
|
||||
# 管理员动作函数 - 关闭文章评论
|
||||
def close_article_commentstatus(modeladmin, request, queryset):
|
||||
"""关闭选中文章的评论功能"""
|
||||
queryset.update(comment_status='c')
|
||||
|
||||
|
||||
# 管理员动作函数 - 开启文章评论
|
||||
def open_article_commentstatus(modeladmin, request, queryset):
|
||||
"""开启选中文章的评论功能"""
|
||||
queryset.update(comment_status='o')
|
||||
|
||||
|
||||
# 设置管理员动作的显示名称
|
||||
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')
|
||||
|
||||
|
||||
class ArticlelAdmin(admin.ModelAdmin):
|
||||
"""文章模型的后台管理配置"""
|
||||
list_per_page = 20 # 每页显示20条记录
|
||||
search_fields = ('body', 'title') # 搜索字段
|
||||
form = ArticleForm # 使用自定义表单
|
||||
list_display = (
|
||||
'id',
|
||||
'title',
|
||||
'author',
|
||||
'link_to_category',
|
||||
'creation_time',
|
||||
'views',
|
||||
'status',
|
||||
'type',
|
||||
'article_order') # 列表页显示的字段
|
||||
list_display_links = ('id', 'title') # 可点击链接的字段
|
||||
list_filter = ('status', 'type', 'category') # 右侧过滤器
|
||||
filter_horizontal = ('tags',) # 水平多选控件用于标签
|
||||
exclude = ('creation_time', 'last_modify_time') # 排除的字段
|
||||
view_on_site = True # 启用"在站点查看"功能
|
||||
actions = [ # 管理员动作列表
|
||||
makr_article_publish,
|
||||
draft_article,
|
||||
close_article_commentstatus,
|
||||
open_article_commentstatus]
|
||||
|
||||
def link_to_category(self, obj):
|
||||
"""生成分类的管理后台链接"""
|
||||
info = (obj.category._meta.app_label, obj.category._meta.model_name)
|
||||
link = reverse('admin:%s_%s_change' % info, args=(obj.category.id,))
|
||||
return format_html(u'<a href="%s">%s</a>' % (link, obj.category.name))
|
||||
|
||||
link_to_category.short_description = _('category') # 设置列显示名称
|
||||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
"""自定义表单,限制作者只能选择超级用户"""
|
||||
form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs)
|
||||
form.base_fields['author'].queryset = get_user_model(
|
||||
).objects.filter(is_superuser=True)
|
||||
return form
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
"""保存模型时的自定义逻辑"""
|
||||
super(ArticlelAdmin, self).save_model(request, obj, form, change)
|
||||
|
||||
def get_view_on_site_url(self, obj=None):
|
||||
"""获取"在站点查看"的URL"""
|
||||
if obj:
|
||||
url = obj.get_full_url() # 文章的完整URL
|
||||
return url
|
||||
else:
|
||||
from djangoblog.utils import get_current_site
|
||||
site = get_current_site().domain # 站点域名
|
||||
return site
|
||||
|
||||
|
||||
class TagAdmin(admin.ModelAdmin):
|
||||
"""标签模型的后台管理配置"""
|
||||
exclude = ('slug', 'last_mod_time', 'creation_time') # 排除自动生成的字段
|
||||
|
||||
|
||||
class CategoryAdmin(admin.ModelAdmin):
|
||||
"""分类模型的后台管理配置"""
|
||||
list_display = ('name', 'parent_category', 'index') # 列表显示字段
|
||||
exclude = ('slug', 'last_mod_time', 'creation_time') # 排除自动生成的字段
|
||||
|
||||
|
||||
class LinksAdmin(admin.ModelAdmin):
|
||||
"""友情链接模型的后台管理配置"""
|
||||
exclude = ('last_mod_time', 'creation_time') # 排除时间字段
|
||||
|
||||
|
||||
class SideBarAdmin(admin.ModelAdmin):
|
||||
"""侧边栏模型的后台管理配置"""
|
||||
list_display = ('name', 'content', 'is_enable', 'sequence') # 列表显示字段
|
||||
exclude = ('last_mod_time', 'creation_time') # 排除时间字段
|
||||
|
||||
|
||||
class BlogSettingsAdmin(admin.ModelAdmin):
|
||||
"""博客设置模型的后台管理配置"""
|
||||
pass # 使用默认管理配置
|
||||
Loading…
Reference in new issue