Menu
CoddyTech

自定义管理后台

本课属于 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 而停止运行。

challenge icon

挑战

简单

在 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)
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

模型和管理后台中的所有课

自己练习: Django 在线编辑器