自定义管理后台
本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 21 课,共 23 课。
管理后台的图书列表只有一列,即每本书的 __str__,而且没有任何搜索方式。用装饰器注册的 ModelAdmin 类可以改变这一点。对于带有 ForeignKey book 的 Loan:
@admin.register(Loan)
class LoanAdmin(admin.ModelAdmin):
list_display = ["book", "friend", "lent_on", "returned"]
search_fields = ["friend", "book__title"]
list_filter = ["returned", "lent_on"]list_display 用来选择要显示的列;ForeignKey 列会显示关联行的 __str__,而多对多字段不能作为列。search_fields 会添加搜索框。要通过 ForeignKey 搜索,请在另一个模型的字段名之前加上两个下划线,例如 book__title:单独的 book 是链接,不是文本,会导致搜索出错。list_filter 会添加筛选器侧边栏。
这个装饰器的作用与 admin.site.register(Loan, LoanAdmin) 相同。每个模型只能注册一次:第二次注册会导致站点因 AlreadyRegistered 而停止运行。
挑战
简单在 books/admin.py 中,为 Book 配置 BookAdmin,替换它原本的普通注册。图书列表应包含:
title、author、year、genre和is_read列- 一个可按书名或作者姓名查找图书的搜索框
- 一个可按
genre和is_read筛选的侧边栏
再次运行 createsuperuser,登录并在图书中搜索 herbert:Children of Dune 和 Dune。
亲手试试
from django.contrib import admin
from .models import Author, Book, Tag
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Tag)
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
模型和管理后台中的所有课
自己练习: Django 在线编辑器