自定义后台表单
通过amdin.site.register(Question)注册Question模型,Django能够构建一个默认的表单用于展示。
# polls/admin.py
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
以上修改使得"Publication date"字段显示在"Question"字段之前。
# polls/admin.py
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
filedsets元组中的第一个元素是字段集的标题。
添加关联的对象
注册Choice
# polls/admin.py
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
Choice对象在Question后台页面编辑。
# polls/admin.py
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
Django提供了一种表格的单行显示关联对象的方法
# polls/admin.py
class ChoiceInline(admin.TabularInline):
#...
通过TabularInline,关联对象以一种表格式的方式展示,显得更加紧凑。
自定义后台更改列表
默认情况下,Django显示每个对象的str()返回的值。
原始外观
list_display是一个包含要显示的字段名的元组
# polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
过滤器使用list_filter
list_filter = ['pub_date']
添加了一个”过滤器“侧边栏,允许以pub_date字段来过滤列表
搜索框使用search_fields
search_fields = ['question_text']
在列表的顶部增加一个搜索框。输入待搜索项时,Django将搜索question_text字段。(使用LIKE来查询数据)