Django-filter: 传递初始值

创建于 2014-08-28  ·  5评论  ·  资料来源: carltongibson/django-filter

我尝试通过分别尝试以下方法(yadda 是占位符值)将初始值传递给表单:

#views.py
def operator_search(request):
    operators = Operator.objects.all()
    f = OperatorFilter(request.GET, initial={'operator_city':'yadda'}, queryset=Operator.objects.all())
    return render(request, 'vendors/operator_search.html', {'filter':f, 'operators':operators})
#forms.py
class OperatorFilter(django_filters.FilterSet):
     operator_city = django_filters.CharFilter(initial="yadda")
     class Meta:
         model = Operator

两者似乎都不起作用。 使用 django-filters 时如何为表单设置初始值?

最有用的评论

在 ChoiceField 的情况下,您可以使用:
empty_label=None, null_value=<default-value>, null_label=<default-label>

所有5条评论

我也想知道这一点,我深入研究了不同的 Filter、FilterSet 和 Form 对象,但没有找到合适的方法来做到这一点。 我不相信 initial 会起作用,因为它使用绑定表单,尽管我没有找到传递数据本身的好方法。 我通过 QueryDict 找到了一种解决方法,并将其传递给 FilterSet,但必须有一种更简洁的方法来做到这一点。

您介意发布一段您的解决方法吗? 我有点卡在这一点上,我的用户厌倦了他们的搜索默认为阿富汗:)

@chromakey - 我认为这是一个使用问题,所以它更好地针对邮件列表

但是,表单的数据只是传递给 FilterSet 的数据,所以如果我理解正确,您应该能够执行以下操作:

initial = {'operator_city':'yadda'}
initial.update(request.GET)
f = OperatorFilter(initial, ...)

如果不是这样,请跟进并在邮件列表中解释更多。 谢谢。

我搜索了邮件列表,但找不到解决方案。 这是我想出的解决方法(自行决定使用):

 ####### WARNING: this is a hack to enable initial filter field selection in django-filters########
# Create a mutable QueryDict object, default is immutable
initial = QueryDict('active_study=True', mutable=True)
# QueryDict update works different than normal dictionary update. Refer to docs.
initial.update(request.GET)
# Place the hacked, mutable QueryDict to the FilterSet.
filter = StudyFilter(initial, queryset=Study.objects.all())

在 ChoiceField 的情况下,您可以使用:
empty_label=None, null_value=<default-value>, null_label=<default-label>

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

madelyneriksen picture madelyneriksen  ·  4评论

gsvr picture gsvr  ·  3评论

blueyed picture blueyed  ·  4评论

edmorley picture edmorley  ·  3评论

sassanh picture sassanh  ·  4评论