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