编写你的第一个 Django 应用,第 7 部分 | Django 文档 | Django
app/admin.py
1. 单表后台自定义表单
1.1 简单方式
指定表单中,不包括的字段。
class ClassAAdmin(admin.ModelAdmin):
include = ['creator', 'created_date', 'modified_date']
fields = ['field1', 'field2']
1.2 字段集方式
多字段在同一行展示。经测试,TextField只能单行展示。
class ClassBadmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields':['field1', 'field2']}),
('FieldsetTitle', {'fields':['field1', 'field2']}),
]
# 多字段,同一行展示。
class StudentAdmin(admin.ModelAdmin):
fieldsets = [
('settitle', {'fields': [('f1', 'f2', 'f2'), ('f3', 'f4'), 'f5']}),
(),
]
自定义表单追加到注册中
admin.site.register(ClassA, ClassAAdmin)
admin.site.register(classB, ClassBAdmin)
2. 一对多关系,添加关联自定义表单
# 2. 一对多关系,添加关联自定义表单
from django.contrib import admin
from app.models import Quesion, Choice
2.1 逐个添加可选项
admin.site.register(Choice)
2.2 BtackedInline以堆叠方式显示关联对象(添加和修改问题时,同时添加多个可选项)
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
filedsets = [
(None, {'fields':['question_text']}),
('Data Information', {'fields': ['pub_date'], 'classes': ["ChoiceInline"]}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
2.3 TabularInline以表格式显示关联对象
class ChoiceInline(admin.TabularInline):
...
# TabularInline,有一个delete列。
3. 自定义后台更改列表样式
默认返回str()的值。自定义列表样式,可以实现排序,was_published_recently列除外(因为没有实现排序方法)。
class QuestionAdmin(admin.ModelAdmin):
list_display = ['question_text', 'pub_date', 'was_published_recently']
# 注意was_published_recently()的调用方式。
was_published_recently实现排序的方法:
./app/models.py
from django.contrib import admin
class Question(models.Model):
@admin.display(
boolean = True,
ordering = "pub_date",
description = 'Pulbished recently',
)
def was_published_recently(self):
now = timezone.now()
return now - datetimetimedelta(days=1) <= self.pub_date <= now
4. 添加侧边栏过滤器
class QuestionAdmin(admin.ModelAdmin):
list_filter = ['pub_date']
5. 添加搜索框
搜索可以使用任意多的字段,使用LIKE来查询数据。
class QuestionAdmin(admin.ModelAdmin):
search_fileds = ['question_text']
6. 分页