在Django的Admin后台中,可以使用list_filter
字段来添加过滤器,以便按特定字段对数据进行筛选。然而,list_filter
默认只提供简单的选择过滤器,没有搜索框功能。
要在list_filter
中添加搜索框,可以通过自定义过滤器来实现。首先,在你的Admin类中,定义一个新的过滤器类,继承自django.contrib.admin.SimpleListFilter
。然后,重写lookups
方法来定义过滤器选项,以及queryset
方法来处理筛选逻辑。
以下是一个示例代码,演示如何添加搜索框到list_filter
中:
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
class SearchFilter(admin.SimpleListFilter):
title = _('Search')
parameter_name = 'search'
def lookups(self, request, model_admin):
return (
('keyword', _('Keyword')),
)
def queryset(self, request, queryset):
if self.value() == 'keyword':
keyword = request.GET.get('q', '')
if keyword:
queryset = queryset.filter(name__icontains=keyword)
return queryset
class YourModelAdmin(admin.ModelAdmin):
list_filter = (SearchFilter,)
admin.site.register(YourModel, YourModelAdmin)
在上述示例中,我们定义了一个SearchFilter
类作为过滤器,标题为"Search",参数名称为"search"。lookups
方法返回过滤器选项,这里只有一个选项"Keyword"。queryset
方法用于处理筛选逻辑,通过获取GET参数q
来获取搜索关键字,并使用icontains
查询过滤模型的name
字段。
将自定义的过滤器类SearchFilter
添加到list_filter
中,即可在Admin后台的列表页面中看到搜索框。用户可以输入关键字进行筛选,结果将根据输入的关键字过滤显示。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云