初始值不适用于 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的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 3.0 不适用于 Windows 上的 Qt

带有 DRF 的 Django-filter - 如何在使用相同查找应用多个值时执行“和”?

Formik 收音机不适用于嵌套对象值

UIActionSheet 上的 UIDatePicker 不适用于 ipad 4.3

Django-Filter:外键字段上的多个 select2 选择

Javascript 不适用于 ASP.NET 上的 Timer Tick 方法