我有这个字段的形式:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())

District来自点击的city, area来自点击的area。使用queryset=MyArea.objects.all()和queryset=MyArea.objects.all()表单会非常重。我如何使查询集默认为空?


你可以通过这样做来获得一个空的queryset:

MyModel.objects.none()

虽然我不知道你将如何使用这种形式,你可以把它作为你的字段的queryset,以得到你需要的…

你可以在这里找到更多信息


@radtek的评论应该是一个答案,因为它在类似的情况下很有用,但方法与公认的答案不同。

如果您的查询集随着视图中的url而改变。

我用我用过的例子来扩展答案:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)