Django表单验证模型选择

时间:2012-04-20 14:55:21

标签: 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)

人们可以在城市和购物中心注册自己的活动。但是因为有很多城市和更多的购物中心,我想限制购物中心的选择到选定的城市。我创建了一个表单,其中包含城市名称的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。

有谁知道可能导致验证错误的原因?

1 个答案:

答案 0 :(得分:-1)

在表单choices上填写ChoiceField __init__。您可以从提供的data获取城市名称,检索City,过滤购物中心并将其放入choices

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