我有一个由2个ChoiceField和一个CharField组成的表单。当选择第一个项目时,第二个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}}。
我在其他论坛上看到了这个错误,但它几乎总是由于我不关心的multipleChoiceField。
我做错了什么?
答案 0 :(得分:5)
ChoiceField需要设置choices
。这些不只是确定下拉列表中显示的内容,但重要的是,它还确定在提交表单时应接受哪些值。
让我解释一下你的情况。您最初的选择设置为:
CHOICES = (
('', '-- choisir un type en premier')
)
这意味着唯一接受的是空白选择(元组中的第一个条目''
,是字段的实际值,choisir...
是文本值)。
因此,当您通过Javascript添加<option>
元素时,它们的值不会在CHOICES
中,因此当您提交该表单时,它们会被Django拒绝。 10不在CHOICES
。
表单提交的视图应该查看提交给它的选项的值,然后相应地更改传递给ChoiceField的CHOICES
的值。