初始值不适用于 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__
:
['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的主要内容,如果未能解决你的问题,请参考以下文章
带有 DRF 的 Django-filter - 如何在使用相同查找应用多个值时执行“和”?
UIActionSheet 上的 UIDatePicker 不适用于 ipad 4.3