2012-04-20 119 views
-1

我在验证forms.ChoiceField时遇到问题。我有两个表格/模型Django表单验证模型选择

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':[u'Select一个有效的选择。 1不是可用选项之一']}

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

我有另一个MultipleChoiceField是相同的形式,工作正常。两者之间的唯一区别是MultipleChoiceField是使用标准Django生成的,ChoiceField是使用javascript(ajax + django)创建的。

现在我已经找到了一个解决方法,定义了我自己的clean方法,在该方法中,我从self._errors中删除错误并将shopping_centre_id值添加到cleaned_data。

有谁知道什么可能会导致验证错误?

回答

-1

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

但购物中心更好使用ModelChoiceField,因此您不必手动构建choices,而只需将查询集传递给该字段。如果没有data - 将会是ShoppingCenter.objects.none(),否则 - 按城市过滤。

+1

使用ModelChoiceField购物中心是不可能的恐怕因为这取决于用户填写的城市。所以我不知道城市,当我显示表单时,我无法显示购物清单中心。 – Henri 2012-04-21 14:17:33