初始值不适用于 django-filters 上的 ChoiceField

Posted

技术标签:

【中文标题】初始值不适用于 django-filters 上的 ChoiceField【英文标题】:Initial value is not working for ChoiceField on django-filters 【发布时间】:2014-07-07 03:20:48 【问题描述】:

我有以下 django-filter (https://github.com/alex/django-filter/) 过滤器:

类 ApplicationFilter(django_filters.FilterSet): status = django_filters.ChoiceFilter(choices=STATUS2,)

状态包含以下元组列表:

STATUS_CHOICES = ( ('', 你'所有'), ('新',你'新'), ('提交', u'提交'), ('CANCEL', u'取消'), )

现在,我想为该过滤器设置一个不同于空过滤器的初始值(全部)。所以我尝试了以下事情,都没有成功:

我。向字段添加初始参数: status = django_filters.ChoiceFilter(choices=STATUS2, initial = 'NEW' ) 或数组 status = django_filters.ChoiceFilter(choices=STATUS2, initial = ['NEW'] )。使用默认初始值呈现的表单。

二。修改表单的__init__

def __init__(self, *args, **kwargs): super(ApplicationFilter, self).__init__(*args, **kwargs) self.form.initial['status']='NEW' self.form.fields['status'].initial='NEW' -- 再次使用默认初始值 (All) 呈现表单...还尝试将值设置为 ['NEW'] -- 再次没有运气。

有人知道这应该如何处理吗?我正在使用 django-filter 的最新(来自 github)版本。

TIA

【问题讨论】:

设置初始值后尝试调用父方法__init__ 我应该叫它再次吗?我已经调用过一次了! 不,不。只需将此super(...) 行移至末尾即可。我从来没有遇到过这个问题。我调查了我的一个项目,最后我称之为。我不确定这是否能解决您的问题。 self.form 如果我将它放在超级行 after 之后,则会引发异常。我在super() 之前只做了一个print self.form 并得到:AttributeError: 'ApplicationFilter' object has no attribute 'filters' 您找到解决方案了吗? 【参考方案1】:

试试这个:

def __init__(self, *args, **kwargs):
    super(ApplicationFilter, self).init(*args, **kwargs)
    self.initial['status'] = 'NEW'

【讨论】:

你好@Alejandro - 正如你从我的回答中看到的那样,我已经尝试过self.form.initial['status']='NEW',但没有运气:( @fierroformo 也不起作用。它对你有用吗?【参考方案2】:

这个答案可能对你有用: Set initial value with django-filters?

在我看来,我愿意:

get_query = request.GET.copy()
if 'status' not in get_query:
    get_query['status'] = 'final'
filter_set = MatterFilterSet(get_query)

【讨论】:

以上是关于初始值不适用于 django-filters 上的 ChoiceField的主要内容,如果未能解决你的问题,请参考以下文章