1

我有一个由 2 个 ChoiceField 和一个 CharField 组成的表单。The second ChoiceField is populated via ajax when an item of the first one is selected.

填充它的模板如下:

{% for a in assets %}
<option value="{{ a.asset_id }}">{{ a.asset_name }}_{{ a.asset_description }}</option>
{% endfor %}

当我尝试提交表单时,出现以下错误:

Select a valid choice. 20 is not one of the available choices.

指向第二个ChoiceField,20对应于选中项的{{a.asset_id}}。

我在其他论坛上看到了这个错误,但它几乎总是由于 multipleChoiceField 这不是我关心的。

我究竟做错了什么 ?

4

1 回答 1

5

一个 ChoiceField 需要choices设置。这些不仅决定了下拉菜单中显示的内容,而且对您来说重要的是,它还决定了提交表单时应该接受哪些值。

让我解释一下你的情况。您的选择最初设置为:

CHOICES = (
    ('', '-- choisir un type en premier')
)

这意味着唯一将被接受的是一个空白选项(元组中的第一个条目'', 是字段的实际值,并且choisir...是文本值)。

因此,当您通过 Javascript 添加<option>元素时,它们的值不会 in CHOICES,因此当您提交该表单时,它们会被 Django 拒绝。10 不在CHOICES

您的表单提交到的视图应该查看提交给它的选项的值,然后相应地更改CHOICES传递给 ChoiceField 的值。

于 2011-08-24T10:57:04.893 回答