使用django-filters应用时,如何在过滤器中设置字段的初始值?
通常使用Django中的标准表单,例如一个简单的选择列表表单:
class MyForm(forms.Form):
OPTIONS=(('APP','Apple'),('BAN','Banana'))
country = forms.ChoiceField(widget=forms.Select(),
choices=OPTIONS, initial='BAN')将表单条目初始化为Banana。但是,在我的filter.py中,如果我有如下内容:
class MyFilter(django_filters.FilterSet):
OPTIONS=(('APP','Apple'),('BAN','Banana'))
myfield = django_filters.ChoiceFilter(
widget=django_filters.widgets.forms.Select(),choices=OPTIONS)
.
.我应该把initial='BAN'放在哪里,以获得下拉列表等的初始选定元素?我尝试了ChoiceFilter参数和Select()参数,但都没有用。
我认为Filters的想法是非常接近地反映Forms的行为,只是明显地增加了过滤的好处,所以我很惊讶在(在我看来)直观的地方初始化不起作用。
发布于 2016-07-21 20:50:28
这对我很有效。如果请求中未提供数据,则设置默认值:
data = request.GET.copy()
if len(data) == 0:
data['field'] = initial_value
filters = MyFilterSet(data)发布于 2017-03-15 17:53:28
使用与user1867622相同的方法,我使用:
get_query = request.GET.copy()
if 'status' not in get_query:
get_query['status'] = 'final'
sfilter = MatterFilterSet(get_query, queryset=matters)发布于 2019-07-03 05:34:03
与其他答案不同,我不会更改request.GET中的数据,而是直接修改查询集:
def get_filterset_kwargs(self, filterset_class):
kwargs = super().get_filterset_kwargs(filterset_class)
if kwargs['data'] is None:
kwargs['queryset'] = kwargs['queryset'].filter(myfield ='BAN')
return kwargs我之所以使用这种方法,是因为通过将kwargs['data']从request.GET更改为dict,您将丢失getlist方法,并且每个键只能检索一个值。
https://stackoverflow.com/questions/21840365
复制相似问题