首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用django-filters设置初始值?

使用django-filters设置初始值?
EN

Stack Overflow用户
提问于 2014-02-18 06:15:21
回答 3查看 3.8K关注 0票数 4

使用django-filters应用时,如何在过滤器中设置字段的初始值?

通常使用Django中的标准表单,例如一个简单的选择列表表单:

代码语言:javascript
复制
class MyForm(forms.Form):
    OPTIONS=(('APP','Apple'),('BAN','Banana')) 
    country = forms.ChoiceField(widget=forms.Select(),
                                         choices=OPTIONS, initial='BAN')

将表单条目初始化为Banana。但是,在我的filter.py中,如果我有如下内容:

代码语言:javascript
复制
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的行为,只是明显地增加了过滤的好处,所以我很惊讶在(在我看来)直观的地方初始化不起作用。

EN

回答 3

Stack Overflow用户

发布于 2016-07-21 20:50:28

这对我很有效。如果请求中未提供数据,则设置默认值:

代码语言:javascript
复制
data = request.GET.copy()
if len(data) == 0:
    data['field'] = initial_value
filters = MyFilterSet(data)
票数 2
EN

Stack Overflow用户

发布于 2017-03-15 17:53:28

使用与user1867622相同的方法,我使用:

代码语言:javascript
复制
get_query = request.GET.copy()
if 'status' not in get_query:
    get_query['status'] = 'final'
sfilter = MatterFilterSet(get_query, queryset=matters)
票数 1
EN

Stack Overflow用户

发布于 2019-07-03 05:34:03

与其他答案不同,我不会更改request.GET中的数据,而是直接修改查询集:

代码语言:javascript
复制
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方法,并且每个键只能检索一个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21840365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档