Python 使用Django SimpleListFilter的自定义动态列表过滤器
根据,可以通过创建“从django.contrib.admin.SimpleListFilter继承的类来编写自定义列表筛选器,您需要为其提供标题和参数\u name属性,并覆盖查找和查询集方法,例如。” 像这样的事情:Python 使用Django SimpleListFilter的自定义动态列表过滤器,python,django,django-admin,django-admin-filters,Python,Django,Django Admin,Django Admin Filters,根据,可以通过创建“从django.contrib.admin.SimpleListFilter继承的类来编写自定义列表筛选器,您需要为其提供标题和参数\u name属性,并覆盖查找和查询集方法,例如。” 像这样的事情: from datetime import date from django.contrib import admin from django.utils.translation import gettext_lazy as _ class CustomListFilter(
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)
它很好用。但是,是否可以通过传递字段名和比较值来创建更多的动态列表过滤器,以避免复制和超越代码,并在许多具有不同字段名和不同比较值的管理模型中重用代码?是否希望用户能够以纯文本的形式输入字段名和比较值,或者它们也可以是一个选择列表?不,我只是想防止复制代码@在这种情况下,您可以将CustomListFilter子类化,并将字段名称和比较值设置为不同的值。您希望用户能够以纯文本形式输入字段名称和比较值,还是它们也可以是一个选项列表?不,我只是想防止复制代码@在这种情况下,您只需将CustomListFilter子类化,并设置字段\u name并将\u值与其他值进行比较。