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

标签 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 的想法是非常接近地反射(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.GETdict,您松开了 getlist 方法,每个键只能检索一个值。

关于python - 使用 django-filters 设置初始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21840365/

相关文章:

python - 具有多个引用的 django 列表模型条目

Python 如何在神经网络中绘制错误

django - 如何优雅地重新启动在 nginx 后面运行 fcgi 的 django?

python - 尝试 "pip install reportlab==3.0"时,我收到了一个包含标题 <string.h> 的疯狂长错误

django - 在 Django 3.0 中使用 mongoDB

django - 在 django-filters 的 FilterSet 中使用全文搜索的最佳方式?

django - 无法将关键字 'model' 解析为字段。 Django 过滤器

python - 从列表中有条件地选择元组

python - 分别改变并行进程中的不同python对象

python - 在Python中给定一个包含该子字符串的字符串,查找该子字符串的所有索引