根据Django document,可以通过创建“继承自django.contrib.admin.SimpleListFilter的类来编写自定义列表过滤器,您需要向该类提供title和parameter_name属性,并覆盖查找和查询集方法,例如 像这样的东西:
from datetime import date
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
class CustomListFilter(admin.SimpleListFilter):
title = _('filendName_amount')
parameter_name = 'amount'
filed_name = 'filed_name'
compare_value = 100000
def lookups(self, request, model_admin):
return (
('mt', _('more than ') + str(self.compare_value)),
('lt', _('less than ') + str(self.compare_value)),
)
def queryset(self, request, queryset):
kwargs = {}
if self.value() == 'mt':
kwargs = {
'{0}__{1}'.format(self.filed_name, 'gte'): self.compare_value,
}
if self.value() == 'lt':
kwargs = {
'{0}__{1}'.format(self.filed_name, 'lte'): self.compare_value,
}
return queryset.filter(**kwargs)
工作正常。但是是否可以传递filed_name和compare_value来创建更多动态列表过滤器,以使其不复制并通过代码,而在具有不同字段名称和不同比较值的许多管理模型中重用它?