用django-filters设置初始值?

时间:2014-02-17 22:15:21

标签: python django django-filters

使用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的行为,只是显然有过滤的额外好处,所以我很惊讶地初始化(对我来说似乎)直观的地方不起作用。

3 个答案:

答案 0 :(得分:2)

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

data = request.GET.copy()
if len(data) == 0:
    data['field'] = initial_value
filters = MyFilterSet(data)

答案 1 :(得分:0)

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

get_query = request.GET.copy()
if 'status' not in get_query:
    get_query['status'] = 'final'
sfilter = MatterFilterSet(get_query, queryset=matters)

答案 2 :(得分:0)

与其他答案不同,我不会更改using UnityEngine; using System.Collections; public class Controller : MonoBehaviour { public float speed; private Vector2 moveVelocity; private Rigidbody2D rigidBody; void Start() { rigidBody = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { Vector2 moveInput = new Vector2(moveInput.GetAxis("Horizontal"), Input.GetAxis("Vertical")); moveVelocity = moveInput.normalized * speed; } void fixedUpdate () { rigidBody.MovePosition(rigidBody.position + moveVelocity * Time.fixedDeltaTime); } } 中的数据,而是直接修改了查询集:

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方法,每个键只能检索一个值。