使用Django SimpleListFilter自定义动态list_filter

时间:2019-09-05 07:34:09

标签: python django django-admin django-admin-filters

根据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来创建更多动态列表过滤器,以使其不复制并通过代码,而在具有不同字段名称和不同比较值的许多管理模型中重用它?

0 个答案:

没有答案