默认情况下在Django表单字段中创建空查询集


169

我有以下形式的字段:

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())

地区来自点击城市,地区来自点击区域。与 queryset=MyDistrict.objects.all()queryset=MyArea.objects.all()形式将非常繁重。默认情况下,如何使查询集为空?


我建议的修改可以改善帖子。通常,任何帖子都不应以“谢谢”结尾。这不是个人的,芽。meta.stackexchange.com/questions/17878/…–
Telarian

Answers:


422

您可以通过执行以下操作获得一个空的查询集:

MyModel.objects.none()

尽管我不知道您将如何使用该表格,但可以将其作为字段的查询集,以获取所需的内容...

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


4
在这种情况下,您的查询集会根据url参数在视图中更改。然后在您的视图中按如下所示设置正确的查询集:edit_form.fields [“ asset”]。queryset = Asset.objects.filter(location_id = location_id)
radtek 2014年

如果我没有模型,我只是在做什么values_list('something', flat=True)
鲍里斯(Boris)

2

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

如果您的查询集随视图中的URL更改。

我用示例扩展答案:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.