django admin站点管理
2018-08-19 本文已影响102人
陆_志东
创建管理员账户
python manage.py createsuperuser
注册模型类
使用admin.site.register(Question)
就能注册一个模型类,但这样的是默认的模型,有时候我们需要做一些自定义选项,就需要再添加一个模型管理对象
作为第二个参数admin.site.register(Question, QuestionAdmin)
.
--polls/admin.py文件
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text'] --在编辑Question时可以编辑的字段
admin.site.register(Question, QuestionAdmin)
上面代码效果图
如果想要上面效果图的表单分成多个而不是一个可以使用fieldsets
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']}),
] --在编辑Question时可以编辑的字段
--fieldsets 中每个元组的第一个元素是字段集的标题
admin.site.register(Question, QuestionAdmin)
上面代码效果图
给question添加关联的对象choise
添加的方式一
即默认的注册方式:这种方式效率不是太高,推荐方式二
polls/admin.py
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
上面代码效果图
注意
上面效果图Question是一个选择下拉框,对应很多个choise对象,如果你想继续添加choise对象,可以点击右边的加号
+
,点击之后就会弹出一个弹出框让你编辑choise对象,然后点击save
保存
方式二:添加额外的模型管理对象
polls/admin.py
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3 --指定默认出现几个空白的choise编辑栏,且这三个默认的编辑栏无法被删除,即始终保持3个空白栏
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
] --在编辑Question时可以编辑的字段
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
上面代码效果图
在现有的三个Choice的底部,你会发现一个“Add another Choice”的链接。 如果你点击它,就会增加一个新的空白Choice。 如果你想移除一个新增加的空白Choice,可以点击其右上角的X。 请注意,你无法移除那最初的三个空白Choice, 下面的图片展示新增加的一个空白Choice:
image
如果你觉得上面图片那样的按行显示,太占空间,可以使用按行列表格的方式显示,做法就是更改模型管理对象继承的父类
即可,将StackedInline
父类换为TabularInline
父类
image
设置模型类对象的显示(上面的操作是编辑模型类的选项,下面是展示模型类的选项)
默认地,Django显示每个对象的str()返回的内容,即默认是返回python类的内建方法__str__()
方法的返回值
我们可以使用
list_display
属性来扩充对象的显示字段,增加信息的内容展示
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
image
你也可以添加一个过滤器list_filter
来筛选出哪些对象可以显示
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
image
也可以添加一个搜索功能search_fields
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question_text']