django admin用法
django admin用法
基本使用
from django.contrib import admin
from .models import *
# Register your models here.
@admin.register(Question) # Question是表
class QuestionAdmin(admin.ModelAdmin):
fields = [
# 'question_text', 放在pub_date的上面那么在展示的时候就会在它的上面,按列表索引顺序展示
'pub_date',
'question_text',
]
给几个字段加标题
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['pub_date']}),
('question_info', {'fields': ['question_text']})
]
fieldsets
元组中的第一个元素是字段集的标题。以下是我们的表单现在的样子:
添加关联的对象
写一个继承TabularInline的类,里面的model写被关联的model,然后在inlines里加入该类就可以了
class ChoiceLine(admin.TabularInline):
model = Choice # 指定关联表
extra = 3 # 一次可以添加关联对象的数量
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['pub_date']}),
('question_info', {'fields': ['question_text']})
]
inlines = [ChoiceLine] # 在这里加入新写的类
如果要在展示的时候区分开来的话可以继承StackedInline类,下面是效果
class ChoiceLine(admin.StackedInline):
model = Choice # 指定关联表
extra = 3 # 一次可以添加关联对象的数量
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['pub_date']}),
('question_info', {'fields': ['question_text']})
]
inlines = [ChoiceLine] # 在这里加入新写的类
自定义后台展示列表字段
默认情况下,Django 显示每个对象的 str()
返回的值。但有时如果我们能够显示单个字段,它会更有帮助。为此,使用 list_display
后台选项,它是一个包含要显示的字段名的元组,在更改列表页中以列的形式展示这个对象:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date')
另外,让我们把 model中定义的 was_published_recently()
方法也加上:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
现在修改投票的列表页看起来像这样:
你可以点击列标题来对这些行进行排序——除了 was_published_recently
这个列,因为没有实现排序方法。顺便看下这个列的标题 was_published_recently
,默认就是方法名(用空格替换下划线),该列的每行都以字符串形式展示出处。
过滤功能
再次编辑文件 polls/admin.py
,优化 Question
变更页:过滤器,使用 list_filter
。将以下代码添加至 QuestionAdmin
:
list_filter = ['pub_date']
这样做添加了一个“过滤器”侧边栏,允许人们以 pub_date
字段来过滤列表:
展示的过滤器类型取决你你要过滤的字段的类型。因为 pub_date
是类 DateTimeField
,Django 知道要提供哪个过滤器:“任意时间”,“今天”,“过去7天”,“这个月”和“今年”。
搜索功能
search_fields = ['question_text']
在列表的顶部增加一个搜索框。当输入待搜项时,Django 将搜索 question_text
字段。你可以使用任意多的字段——由于后台使用 LIKE
来查询数据,将待搜索的字段数限制为一个不会出问题大小,会便于数据库进行查询操作。