我有一个由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
的值。