欢迎访问宙启技术站
智能推送

使用ListFilter()实现在Django管理界面中筛选数据

发布时间:2023-12-22 21:01:18

在Django管理界面中,我们可以通过使用list_filter选项来筛选数据。ListFilter()可以将参数作为对象的属性,将其添加到list_filter选项中。例如,我们可以按照日期,状态,类别等进行筛选。

以下是一个使用ListFilter()实现筛选数据的例子:

假设我们有一个名为Book的模型,其中包含书籍的信息,包括书名、作者、出版日期和状态。

from django.contrib import admin
from django.utils.translation import gettext_lazy as _

from .models import Book

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'publication_date', 'status')
    list_filter = (
        'publication_date',
        'status',
    )
    
admin.site.register(Book, BookAdmin)

在上面的例子中,list_filter选项包含两个元素:publication_datestatus。这会在管理界面中创建两个筛选器。

当我们在管理界面中打开Book模型的列表页面时,我们会发现在右侧边栏上有两个筛选器:一个用于按照publication_date筛选,另一个用于按照status筛选。

通过单击筛选器旁边的下拉菜单,我们可以选择一个或多个选项来进行筛选。根据选项的不同,页面上将只显示满足筛选条件的书籍。

例如,如果选中publication_date筛选器中的2021年,页面上只会显示出版日期为2021年的书籍。

此外,我们还可以进一步自定义筛选器的行为。例如,如果我们希望在筛选器中显示一个可搜索的文本框,以便用户能够根据书名进行筛选,我们可以使用list_filter选项的第二个参数来设置特定的筛选器类。

from django.contrib import admin
from django.utils.translation import gettext_lazy as _

from .models import Book

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'publication_date', 'status')
    list_filter = (
        ('title', admin.CharFieldListFilter),
        'publication_date',
        'status',
    )
    
admin.site.register(Book, BookAdmin)

在上面的例子中,我们为title属性使用了admin.CharFieldListFilter筛选器类。通过这样做,我们将在筛选器中看到一个可搜索的文本框,用户可以用来根据书名进行筛选。

总而言之,通过使用list_filter选项和适当的筛选器类,我们可以在Django管理界面中创建强大的数据筛选功能,以便根据特定条件快速查询和显示所需的数据。