Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django SimpleListFilter的自定义动态列表过滤器_Python_Django_Django Admin_Django Admin Filters - Fatal编程技术网

Python 使用Django SimpleListFilter的自定义动态列表过滤器

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(

根据,可以通过创建“从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(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值与其他值进行比较。