首页 > 解决方案 > 使用 Django SimpleListFilter 自定义动态 list_filter

问题描述

根据Django 文档,可以通过创建“一个继承自 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来创建更多的动态列表过滤器,以便不要复制和过去代码并在许多具有不同字段名称和不同比较值的管理模型中重用它?

标签: pythondjangodjango-admindjango-admin-filters

解决方案


推荐阅读