自定义管理页面
目录
自定义模型加入后台管理
打开 bookApp/admin.py 文件,注册模型。但是我们的应用在哪呢?它没在索引页面里显示。
只需要再做一件事:我们得告诉管理,Book、Hero 对象需要一个后台接口。打开 bookApp/admin.py
文件,把它编辑成下面这样:
bookApp/admin.py :
from django.contrib import admin
from bookApp.models import Book, Hero
# Register your models here.
admin.site.register([Book, Hero])
体验便捷的管理功能
现在我们向管理页面注册了Book、Hero
类。Django 知道它应该被显示在索引页里:
自定义管理页面
编写后台管理页文件
通过 admin.site.register(Book, BookAdmin) 注册 Book 模型,Django 能够构建一个默认的表单用于展示。通常来说,你期望能自定义表单的外观和工作方式。你可以在注册模型时将这些设置告诉 Django。
你需要遵循以下流程——创建一个模型后台类,接着将其作为第二个参数传给 admin.site.register()
——在你需要修改模型的后台管理选项时这么做。
- Django 提供了 admin.ModelAdmin 类
- 通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式
bookApp/admin.py :
from django.contrib import admin
from bookApp.models import Book, Hero
# Register your models here.
# 内嵌关联注册类
class HeroInline(admin.StackedInline):
model = Hero
extra = 3
class BookAdmin(admin.ModelAdmin):
# 列表页展示的设置
# 显示字段,可以点击列头进行排序
list_display = ['id', 'name', 'pub_date']
# 过滤字段,过滤框会出现在右侧
list_filter = ['pub_date']
# 搜索字段,搜索框会出现在上侧
search_fields = ['name']
# 链接,书名链接到编辑
list_display_links = ['name']
# 分页,分页框会出现在下侧
list_per_page = 2
# 关联对象,与人物关联到一起
inlines = [HeroInline]
class HeroAdmin(admin.ModelAdmin):
# 列表页展示的设置
# 显示字段,可以点击列头进行排序
list_display = ['id', 'name', 'gender']
# 过滤字段,过滤框会出现在右侧
list_filter = ['gender']
# 搜索字段,搜索框会出现在上侧
search_fields = ['name', 'content']
# 链接,书名链接到编辑
list_display_links = ['name']
# 分页,分页框会出现在下侧
list_per_page = 5
# 增加和编辑页的设置
fieldsets = [('必填信息', {'fields': ['name', 'book_id']}),
('选填信息', {'fields': ['gender', 'content']}),
]
# 关联注册
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)
列表页属性
- list_display:显示字段,可以点击列头进行排序
list_display = ['id', 'name', 'gender']
- list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['gender']
- search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['name', 'content']
- list_per_page:分页,分页框会出现在下侧
list_per_page = 2
效果展示
图书管理界面
人物管理界面
添加、修改页属性
- fields:属性的先后顺序
fields = ['pub_date', 'title']
- fieldsets :属性分组, 注意: fields和fieldsets 只能设置一个.
fieldsets = [('必填信息', {'fields': ['name', 'book_id']}),
('选填信息', {'fields': ['gender', 'content']}),
]
新建人物界面:
关联对象
对于 Hero 模型类,有两种注册方式
- 方式一:与 Book 模型类相同
- 方式二:关联注册
admin.StackedInline : 内嵌关联注册类
admin.TabularInline : 表格 关联注册类
bookApp/admin.py:
# bookApp/admin.py
# 内嵌关联注册类
class HeroInline(admin.StackedInline):
model = Hero
extra = 3
class BookAdmin(admin.ModelAdmin):
# .......此处省略部分重复代码
# 关联对象,与人物关联到一起
inlines = [HeroInline]