Admin
Django 自动生成后台的功能十分方便
- 创建可以访问管理网页的用户:
python manage.py createsuperuser - 启动服务, 进入 admin 界面

- 默认只存在对用户组和用户的管理, 因此需要引入我们创建的数据模型的管理: 在 app 的 admin.py 中实现引入
from .models import Question
admin.site.register(Question)

自定义后台表单
初始的后台可控数据十分少, 可以通过修改 APP 目录下的 admin.py 进行精细化控制
from django.contrib import admin
from .models import Question, Choice
class QuestionAdmin(admin.ModelAdmin):
# fields = ['pub_date', 'question_text']
fields = ['question_text', ]
admin.site.register(Question, QuestionAdmin)
- 默认使用
admin.site.register注册 Question 时会展示所有的域 - 可以通过继承
admin.ModelAdmin用fields属性对展示的数据域进行精细化控制

其它展示控制
list_display
控制对象在以列表状态展示时展示的数据域
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'pub_date', 'was_published_recently')

数据域控制
想要对某个数据与进行精细的控制, 可以在定义数据模型时对目标域添加修饰器
- boolean 表示该数据域为布尔类型, 以应用布尔数据的展示方式
- ordering 表示该数据域的排序依赖于 pub_date 数据域
- description 表示该数据域的列名
@admin.display(
boolean=True,
ordering='pub_date',
description='Published recently?'
)
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now

list_filter
list_filter 列表中的属性将支持更加丰富的过滤规则支持
- Tips: 只支持数据库中存在的域哦, 不支持 was_published_recently 这种“函数域”
list_filter = ['pub_date', 'question_text']

search_fields
search_fields 支持搜索框的索引: search_fields = ['question_text']

划分字段集
当 Model 拥有较多字段时, 可以通过 ModelAdmin 中的 filedsets 进行字段集的划分
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)

添加关联对象
常见的就是作为外键, 可以添加其对另一 Model 的引用
- 配置关联的目标对象: 指定其数据模型,
extra属性表示空数据留白, 供创建新的关联对象
# admin.StackedInline: 栈类似的排列展现, 较占空间
# admin.TabularInline: 表格式的单行显示
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 1
- 将目标对象在主对象中使用 inlines 属性关联
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
inlines = [ChoiceInline]

- admin.TabularInline: 表格式的单行显示

修改 Admin 模板
Quick Start
- 修改根目录
settings.py为TEMPLATES的DIRS属性添加本地搜索路径"DIRS": [BASE_DIR / 'templates'], - 在根目录创建
templatex/admin/目录 - 将位于
django/contrib/admin/templates内的原始模板文件base_site.html复制到这个目录 - 修改本地的
base_site.html即可
