Python Django中带有ModelForm模型(多个)选择字段的数据库查询
我有一个表单,其中包含一些模型(多个)选项字段,这些字段有很多选项,因此我希望根据前端的用户响应缩减可用选项,然后通过AJAX填充选择选项 对于Django在本例中何时查询数据库,以及使用AJAX数据填充的Django ModelChoice字段的最佳实践,我有点困惑 起初,我一直在做这样的事情: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
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请参阅编辑。