-1

我在验证 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 选择字段的选项。

但是,当我想验证此表单时,它失败了。我正进入(状态:

表单错误

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

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

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

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

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

4

1 回答 1

-1

在表格choices上填写。您可以从提供的城市名称,检索,过滤购物中心并将它们放入。ChoiceField__init__dataCitychoices

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

于 2012-04-21T04:30:09.493 回答