使用Django中的ModelForm Model(Multiple)Choice字段进行数据库查询

时间:2014-07-15 12:02:00

标签: python ajax django modelform

我有一个带有一些模型(多个)选择字段的表单,这些字段有很多选项,我想根据前端的用户响应减少可用选项,然后通过AJAX填充选择选项。 / p>

我对Django在这种情况下查询数据库的时间有点困惑,以及用AJAX数据填充的Django ModelChoice字段的最佳实践。

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

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.all())

或受限制的查询集:

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.filter(somefield = someValue))

所以,我的问题是,什么时候查询数据库的ModelChoice选项?

混淆源于我所做的另一种形式,我有一个ModelChoiceField,能够动态添加新选项。在这种情况下,除非我在保存新选项后实例化ModelChoiceField ,否则我会收到错误。这让我觉得在表单实例化时查询数据库。但是,考虑到Django查询集的惰性,看起来直到你遍历所述列表(即打印表单选项时)才查询数据库也是有意义的。

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

我见过提及:

contact = forms.ModelChoiceField(queryset=aRelatedModel.objects.none())

...但从未明确解释为何使用此原因。

修改

在这种情况下,我有一个带

的表格
field = forms.ModelChoiceField(queryset = relatedModel.objects.all())

随后在视图中,我天真地做了: myForm = modelForm(request.POST)。如果我在首先保存动态添加的字段之前实例化表单,则会产生错误。添加字段后,然后调用modelForm(request.POST)我不再有"无效的选择"错误 - 可能是因为动态添加的字段现在包含在modelForm查询集中。

但是,我不确定这与这个问题有什么关系。问题是当使用来自数据库的数据填充modelForm的查询集时。

0 个答案:

没有答案