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

填充它的模板如下:

{% 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}}。

我在其他论坛上看到了此错误,但几乎总是由于multiChoiceField引起的,这与我无关。

我究竟做错了什么 ?

最佳答案

ChoiceField需要设置choices。这些不仅确定下拉菜单中显示的内容,而且对您而言很重要,它还确定提交表单时应接受的值。

让我解释一下您的情况。您最初的选择是:

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


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

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

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

10-08 00:53