Python Django中带有ModelForm模型(多个)选择字段的数据库查询

Python Django中带有ModelForm模型(多个)选择字段的数据库查询,python,ajax,django,modelform,Python,Ajax,Django,Modelform,我有一个表单,其中包含一些模型(多个)选项字段,这些字段有很多选项,因此我希望根据前端的用户响应缩减可用选项,然后通过AJAX填充选择选项 对于Django在本例中何时查询数据库,以及使用AJAX数据填充的Django ModelChoice字段的最佳实践,我有点困惑 起初,我一直在做这样的事情: contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.all()) 或受限查询集: contact = forms.Mode

我有一个表单,其中包含一些模型(多个)选项字段,这些字段有很多选项,因此我希望根据前端的用户响应缩减可用选项,然后通过AJAX填充选择选项

对于Django在本例中何时查询数据库,以及使用AJAX数据填充的Django ModelChoice字段的最佳实践,我有点困惑

起初,我一直在做这样的事情:

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.all())
或受限查询集:

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.filter(somefield = someValue))
所以,我的问题是,何时查询DB的ModelChoice选项

这种混乱源于我做的另一个表单,其中我有一个ModelChoiceField,能够动态添加新选项。在这种情况下,除非在保存新选项后实例化ModelChoiceField,否则会出现错误。这让我感觉数据库是在表单实例化时查询的。但是,考虑到Django querysets的惰性,在遍历所述列表(即打印表单选项时)之前不查询DB似乎也是有意义的

那么,在这种情况下,有没有办法避免可能不必要的DB查询?对于将使用AJAX数据填充的ModelChoiceFields,最佳做法是什么

我看到有人提到:

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.none())
……但从来没有明确解释为什么要使用这个

编辑:

在这种情况下,我和

field = forms.ModelChoiceField(queryset = relatedModel.objects.all())
随后,我天真地认为:
myForm=modelForm(request.POST)
。如果我在第一次保存动态添加的字段之前实例化了表单,则会产生错误。在添加字段,然后调用modelForm(request.POST)之后,我不再有“invalid choice”错误——可能是因为动态添加的字段现在包含在modelForm查询集中


然而,我不确定这与这个问题有什么关系。问题是当一个模型表单的查询集被数据库中的数据填充时。

当您在另一个数据库中执行此操作时,会出现什么错误way@DanielRoseman无效的选择。如果不确切知道你在做什么,这并没有多大帮助。@DanielRoseman请参阅编辑。