使用 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
的想法是非常接近地反射(reflect) Forms
的行为,只是明显增加了过滤的好处,所以我很惊讶初始化(到在我看来)直观的地方不起作用。
最佳答案
与其他答案不同,我不会通过更改 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
方法,每个键只能检索一个值。
关于python - 使用 django-filters 设置初始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21840365/