我尝试通过分别尝试以下方法(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 时如何为表单设置初始值?
我也想知道这一点,我深入研究了不同的 Filter、FilterSet 和 Form 对象,但没有找到合适的方法来做到这一点。 我不相信 initial 会起作用,因为它使用绑定表单,尽管我没有找到传递数据本身的好方法。 我通过 QueryDict 找到了一种解决方法,并将其传递给 FilterSet,但必须有一种更简洁的方法来做到这一点。
您介意发布一段您的解决方法吗? 我有点卡在这一点上,我的用户厌倦了他们的搜索默认为阿富汗:)
我搜索了邮件列表,但找不到解决方案。 这是我想出的解决方法(自行决定使用):
####### 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>
最有用的评论
在 ChoiceField 的情况下,您可以使用:
empty_label=None, null_value=<default-value>, null_label=<default-label>