Django自带的admin管理后台简直是个bug级的存在, 几行代码就可以撸出一个功能齐全的管理后台来。小编我今天就带你看下Django自带的admin有哪些高级用法值得掌握。本文建议先收藏再阅读。
我们将以博客为例,创建一个名为blog的app, 再创建一个文章(Article)模型,如下所示:
我们先在blog目录下创建admin.py,添加如下代码。这些都是最常见设置,我这里就不详述了。
from django.contrib import admin
from .models import Article
from django.utils.html import format_html
class ArticleAdmin(admin.ModelAdmin):
# Custom admin list view
list_display = ('title', 'author', 'status', 'create_date', )
# list_display_links = ('title', ) # default
# sortable_by # a sub set of list_display. All fields are sortable by default.
'''define which fields are editable on list view'''
list_editable = ('status', )
'''10 items per page'''
list_per_page = 5
'''Max 200 when clicking show all'''
list_max_show_all = 200 #default
'''Calling select related objects to reduce SQL queries'''
list_select_related = ('author', )
'''Render a search box at top. ^, =, @, None=icontains'''
search_fields = ['title']
'''Render date options at top. do not accept tuple'''
date_hierarchy = 'create_date'
'''Replacement value for empty field'''
empty_value_display = 'NA'
'''filter options'''
list_filter = ('status', 'author__is_superuser', )
admin.site.register(Article, ArticleAdmin)
此时登录django后台访问Article模型你将看到如下基础显示效果。我们将从这里开始展示django自带admin后台更高级的用法。
1. 自定义list_display显示字段
目前文章列表中的文章创建日期是英文字段,不是我们想要的。我们可以自定义一个时间格式(比如以2020-11-09 15:00)展示,并以红色标注。
此时修改我们的admin.py, 在ArticleAdmin类中新增一个custom_date方法,把其加入list_display选项,如下所示:
# Register your models here.
class ArticleAdmin(admin.ModelAdmin):
# Custom admin list view
list_display = ('title', 'author', 'status', 'create_date', 'custom_date', )
'''中间省略'''
'''custom field on list view'''
def custom_date(self, obj):
return format_html(
'<span style="color: red;">{}</span>',
obj.create_date.strftime("%Y-%m-%d %H:%M:%S")
)
custom_date.short_description = '定制格式及颜色'
新的展示效果如下所示:
2. 优化ForeignKey或多对多字段的选择
Django admin中添加或修改一个对象时,对ForeignKey字段默认使用下拉菜单显示。例如本例中文章模型的author是一个ForeignKey字段。当你在admin中创建新的文章时,你将看到