我在验证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自动完成,我使用ajax / jquery来填写ShoppingCenter ChoiceField的值。
一切似乎都有效。我输入了一个有效的城市,javascript填写了ShoppingCenter选择域的选项。
但是,当我想验证此表单时,它会失败。我得到了:
form_errors
{'shopping_centre_id':[你们选择一个有效的选择。 1不是可用的选项之一。']}
虽然1是有效的购物中心ID,但它是从数据库中选择的。
我有另一个MultipleChoiceField是相同的形式,并且工作正常。两者之间的唯一区别是MultipleChoiceField是使用标准Django生成的,ChoiceField是使用javascript(ajax + django)创建的。
现在我通过定义自己的clean方法找到了一种解决方法,在该方法中我从self._errors中删除了错误,并将shopping_centre_id值添加到cleaning_data。
有谁知道可能导致验证错误的原因?
答案 0 :(得分:-1)
在表单choices
上填写ChoiceField
__init__
。您可以从提供的data
获取城市名称,检索City
,过滤购物中心并将其放入choices
。
但最好将ModelChoiceField
用于购物中心,这样您就不必手动构建choices
,只需将查询集传递给该字段即可。如果没有data
- 它将是ShoppingCenter.objects.none()
,否则 - 按城市过滤。