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-Maintenance-Anal.../src/blog/admin.py

213 lines
6.3 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.

#ly:
# coding:utf-8
# ==========================================
# Blog模块 - Django Admin配置
# ==========================================
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 _
from .models import Article
# ==========================================
# 文章表单
# ==========================================
class ArticleForm(forms.ModelForm):
"""
文章编辑表单
用于Django Admin中编辑文章
"""
# body = forms.CharField(widget=AdminPagedownWidget())
class Meta:
model = Article
fields = '__all__'
# ==========================================
# 文章管理操作函数
# ==========================================
def makr_article_publish(modeladmin, request, queryset):
"""
批量发布选中的文章
将选中文章的状态改为'p'(已发布)
【问题】:函数名拼写错误,应为 mark_article_publish
"""
queryset.update(status='p')
def draft_article(modeladmin, request, queryset):
"""
批量把选中的文章设为草稿
将选中文章的状态改为'd'(草稿)
"""
queryset.update(status='d')
def close_article_commentstatus(modeladmin, request, queryset):
"""
批量关闭选中文章的评论
将选中文章的评论状态改为'c'(关闭)
"""
queryset.update(comment_status='c')
def open_article_commentstatus(modeladmin, request, queryset):
"""
批量开启选中文章的评论
将选中文章的评论状态改为'o'(开放)
"""
queryset.update(comment_status='o')
# 设置操作函数在Admin中的显示描述
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')
# ==========================================
# 文章Admin配置
# ==========================================
class ArticlelAdmin(admin.ModelAdmin):
"""
文章管理配置
在Django Admin中管理文章
"""
# 每页显示的记录数
list_per_page = 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):
"""
获取表单
只允许超级用户作为文章作者
【问题】如果没有超级用户queryset会为空UI会显示为空列表
应该有备用方案或提示信息
"""
form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs)
# 将author字段的选项限制为超级用户
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
url = obj.get_full_url()
return url
else:
# 返回网站首页URL
from djangoblog.utils import get_current_site
site = get_current_site().domain
return site
# ==========================================
# 标签Admin配置
# ==========================================
class TagAdmin(admin.ModelAdmin):
"""标签管理"""
# 不显示的字段(由系统自动管理)
exclude = ('slug', 'last_mod_time', 'creation_time')
# ==========================================
# 分类Admin配置
# ==========================================
class CategoryAdmin(admin.ModelAdmin):
"""分类管理"""
# 列表显示的字段
list_display = ('name', 'parent_category', 'index')
# 不显示的字段(由系统自动管理)
exclude = ('slug', 'last_mod_time', 'creation_time')
# ==========================================
# 友情链接Admin配置
# ==========================================
class LinksAdmin(admin.ModelAdmin):
"""友情链接管理"""
# 不显示的字段(由系统自动管理)
exclude = ('last_mod_time', 'creation_time')
# ==========================================
# 侧边栏Admin配置
# ==========================================
class SideBarAdmin(admin.ModelAdmin):
"""侧边栏管理"""
# 列表显示的字段
list_display = ('name', 'content', 'is_enable', 'sequence')
# 不显示的字段(由系统自动管理)
exclude = ('last_mod_time', 'creation_time')
# ==========================================
# 博客配置Admin
# ==========================================
class BlogSettingsAdmin(admin.ModelAdmin):
"""
博客配置管理
【问题】:此类为空实现,应该删除或添加实际配置
"""
pass