我在Django app上有这样的表格:
class CustomForm(forms.Form):
field1 = forms.ModelChoiceField(queryset=ModelA.objects.filter(type=A))
field2 = forms.ModelChoiceField(queryset=ModelA.objects.filter(type=B))
调试工具栏告诉我 ModelA 上有两个重复的查询,但过滤条件不同。这是一个错误吗?另外,我想知道是否有办法优化这种情况并只进行一次查询
谢谢!
答案 0 :(得分:0)
ModelA.objects.filter(type=A)
和ModelA.objects.filter(type=B)
是两个独立的查询集,因此需要两个查询。
理论上,你可以做到
ModelA.objects.filter(type__in=[A, B])
哪个对象可以type=A
或type=B
。然后,您可以在Python中过滤列表。但是,这不一定会更好。您将无法再使用ModelChoiceField
,因此您的代码会更复杂。