跳到主要内容

Django 管理站点列表显示

介绍

Django的管理站点(Admin Site)是一个强大的工具,允许开发者快速创建和管理后台界面。默认情况下,Django会自动为每个注册的模型生成一个列表视图,显示模型的所有实例。然而,有时我们需要自定义这个列表视图,以便更好地展示数据或提高管理效率。

在本教程中,我们将学习如何自定义Django管理站点的列表显示,包括如何选择显示的字段、排序、过滤和搜索功能。

基本配置

首先,我们需要在 admin.py 文件中注册我们的模型。假设我们有一个 Book 模型:

from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
pass

在这个简单的配置中,Django会自动为 Book 模型生成一个列表视图,显示所有字段。

自定义列表显示

选择显示的字段

默认情况下,Django会显示模型的所有字段。我们可以通过设置 list_display 属性来选择要显示的字段:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')

在这个例子中,列表视图将只显示 titleauthorpublished_date 字段。

排序

我们可以通过设置 ordering 属性来指定默认的排序方式:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
ordering = ('-published_date',)

在这个例子中,书籍将按 published_date 降序排列。

过滤

Django管理站点还支持通过 list_filter 属性添加过滤器:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
list_filter = ('author', 'published_date')

在这个例子中,我们可以通过 authorpublished_date 来过滤书籍。

搜索

我们可以通过设置 search_fields 属性来启用搜索功能:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
search_fields = ('title', 'author__name')

在这个例子中,我们可以通过 titleauthorname 字段来搜索书籍。

实际案例

假设我们有一个图书馆管理系统,我们需要在管理站点中显示书籍的标题、作者、出版日期和库存数量。我们还需要按作者和出版日期过滤书籍,并能够通过书名和作者名进行搜索。

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date', 'stock')
list_filter = ('author', 'published_date')
search_fields = ('title', 'author__name')
ordering = ('-published_date',)

在这个配置中,管理站点的列表视图将显示书籍的标题、作者、出版日期和库存数量。我们可以按作者和出版日期过滤书籍,并通过书名和作者名进行搜索。书籍将按出版日期降序排列。

总结

通过自定义Django管理站点的列表显示,我们可以更好地管理和展示数据。我们学习了如何选择显示的字段、排序、过滤和搜索功能。这些功能可以帮助我们更高效地管理后台数据。

附加资源

练习

  1. 在你的项目中创建一个新的模型,并在管理站点中注册它。
  2. 自定义列表显示,选择你感兴趣的字段。
  3. 添加排序、过滤和搜索功能,并测试它们的效果。