Django表单不验证:"选择一个有效的选择.20不是可用的选择之一"

Joh*_*nna 1 django jquery django-forms choicefield

我有一个由2个ChoiceField和一个CharField组成的表单.当选择第一个项目时,第二个ChoiceField通过ajax填充.

填充它的模板如下:

{% for a in assets %}
<option value="{{ a.asset_id }}">{{ a.asset_name }}_{{ a.asset_description }}</option>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

当我尝试提交表单时,我收到以下错误:

Select a valid choice. 20 is not one of the available choices.
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么 ?

Sam*_*ing 5

ChoiceField需要choices设置.这些不只是确定下拉列表中显示的内容,但重要的是,它还确定在提交表单时应接受的值.

让我解释你的情况发生了什么.您最初的选择设置为:

CHOICES = (
    ('', '-- choisir un type en premier')
)
Run Code Online (Sandbox Code Playgroud)

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

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

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