django-filters 中 ChoiceField 的初始值不起作用
我有一个django-filter(https://github.com/alex/django-filter/)的过滤器:
class ApplicationFilter(django_filters.FilterSet): status = django_filters.ChoiceFilter(choices=STATUS2,)
这个过滤器的状态包含以下元组列表:
STATUS_CHOICES = ( ( '', u'All'), ( 'NEW', u'New'), ( 'SUBMIT', u'Submit'), ( 'CANCEL', u'Cancel'), )
现在,我想为这个过滤器设置一个初始值,而不是默认的空值(全部)。所以我尝试了以下几种方法,但都没有成功:
i. 在字段中添加一个初始参数:
status = django_filters.ChoiceFilter(choices=STATUS2, initial = 'NEW' )
或者用数组 status = django_filters.ChoiceFilter(choices=STATUS2, initial = ['NEW'] )
。但是表单显示的还是默认的初始值。
ii. 修改表单的 __init__
方法:
def __init__(self, *args, **kwargs): super(ApplicationFilter, self).__init__(*args, **kwargs) self.form.initial['status']='NEW' self.form.fields['status'].initial='NEW'-- 结果表单还是显示默认的初始值(全部)... 我也尝试过把值设置为
['NEW']
,但还是没成功。
有没有人知道该怎么处理这个问题?我使用的是最新的(从github上下载的)django-filter版本。
谢谢大家!
2 个回答
0
这个回答可能对你有帮助:
在我的视图中,我这样做:
get_query = request.GET.copy()
if 'status' not in get_query:
get_query['status'] = 'final'
filter_set = MatterFilterSet(get_query)
0
试试这个:
def __init__(self, *args, **kwargs):
super(ApplicationFilter, self).init(*args, **kwargs)
self.initial['status'] = 'NEW'