更改ModelChoiceField上的查询集

时间:2016-01-28 18:34:21

标签: django forms

我有一个关于在django表单中使用不同查询集的问题。

所以我有一个表单要求用户从第一个下拉列表中选择一个选项,这将改变另一个下拉列表中的查询集。

class TransportForm(myformclass):
    trans_type_choices = ['car', 'bus', 'plane', 'train'] 
    trans_type = forms.ChoiceField(choices=model_type_choices, label='Select the model you wish to change')
    model = forms.ModelChoiceField(queryset=Label.objects.none(), label='Choose a model')

我的表单使用ajax来执行正确的查询并返回值;我不想有单独的字段,因为查询计数太高了。

我的问题是,当我提交表单时,查询集对于验证是错误的。我应该以某种方式覆盖表单验证并阻止这种情况发生吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为问题是django ModelChoiceField使用queryset来存储所有可能的选择。如果您更改前端代码以传入id中不在queryset中的Label.objects.all(),则django将无法通过验证。

一个简单的解决方案是使用ModelChoiceField作为trans_type的查询集,但是根据另一个选择更改前端。如果您担心安全问题,可以编写自己的验证,以便仔细检查model<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/testgoogleapikey" /> 之间的相关性。