Django表单验证模型选择

Django表单验证模型选择,django,forms,validation,Django,Forms,Validation,我在验证forms.ChoiceField时遇到问题。我有两张桌子/两个模型 class City(models.Model): ... name = models.CharField(max_length=64) ... class ShoppingCenter(models.Model): ... name = models.CharField(max_length=64) city = models.ForeignKey(City) 人们

我在验证forms.ChoiceField时遇到问题。我有两张桌子/两个模型

class City(models.Model):
    ...
    name = models.CharField(max_length=64)
    ...

class ShoppingCenter(models.Model):
    ...
    name = models.CharField(max_length=64)
    city = models.ForeignKey(City)
人们可以在城市和购物中心登记他们的活动。但是因为有很多城市,甚至更多的购物中心,我想把购物中心的选择限制在选定的城市。我创建了一个表单,其中城市名称为CharField,而ChoiceField为空

在用户在CharField中输入城市后,使用ajax/jquery autocomplete,我使用ajax/jquery填充ShoppingCenter选项字段的值

所有这些似乎都奏效了。我输入一个有效的城市,javascript将填充ShoppingCenter selectfield的选项

但是,当我想验证此表单时,它失败了。我得到:

表格错误

{'shopping_centre_id':[u'选择一个有效的选项。1不是可用的选项之一。]}

虽然1是一个有效的购物中心id,但它是从数据库中选择的

我有另一个多回声冰场是相同的形式,这很好。两者之间唯一的区别是MultipleChoiceField是使用标准Django生成的,ChoiceField是使用javascript(ajax+Django)创建的

目前,我已经找到了一个解决方法,通过定义自己的clean方法,从self.\u错误中删除错误,并将shopping\u center\u id值添加到clean\u数据中


有人知道什么可能导致验证错误吗?

在表单的
\uuuu init\uuu
上填写
选项
。您可以从提供的
数据
中获取城市名称,检索
城市
,筛选购物中心并将其放入
选项


但最好在购物中心使用
modelcooicefield
,这样您就不必手动构建
选项
,只需将查询集传递给该字段即可。如果没有
数据
,则将是
ShoppingCenter.objects.none()
,否则将按城市过滤。

恐怕不可能为购物中心使用ModelChoiceField,因为这取决于用户填写的城市。所以当我显示表单时我不知道城市,所以我不能显示购物中心的列表。