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

Django中使用ListFilter()实现条件范围筛选

发布时间:2023-12-22 21:07:05

在Django中,可以使用ListFilter()来实现条件范围筛选,它可以在admin后台中的过滤器中使用。ListFilter()允许我们创建自定义的过滤器,通过选择一个或多个值来筛选数据。下面我将结合一个示例来说明如何使用ListFilter()

假设我们有一个电影信息的模型,包含电影的标题、导演、发布日期和评分。我们想要在admin后台中使用过滤器来筛选电影的评分范围。首先,我们需要在admin.py中导入所需的模块:

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

接下来,我们定义一个自定义的过滤器类来筛选评分范围:

class RatingFilter(admin.SimpleListFilter):
    title = _('Rating')
    parameter_name = 'rating'

    def lookups(self, request, model_admin):
        return (
            ('high', _('High rating')),
            ('medium', _('Medium rating')),
            ('low', _('Low rating')),
        )

    def queryset(self, request, queryset):
        if self.value() == 'high':
            return queryset.filter(rating__gte=8)
        if self.value() == 'medium':
            return queryset.filter(rating__range=(5, 7))
        if self.value() == 'low':
            return queryset.filter(rating__lt=5)

然后,我们在admin后台的Movie模型中注册这个过滤器:

class MovieAdmin(admin.ModelAdmin):
    list_filter = (RatingFilter,)

admin.site.register(Movie, MovieAdmin)

现在,在admin后台的Movie模型页面中,你会看到一个名为"Rating"的过滤器。在这个过滤器中,你可以选择"High rating"、"Medium rating"或"Low rating"来筛选电影评分的范围。

这就是使用ListFilter()实现条件范围筛选的方法。你可以根据自己的需求和模型的字段来定义不同的过滤器,以实现更精确的数据筛选。