我有一个由 2 个 ChoiceField 和一个 CharField 组成的表单。当选择第一个 ChoiceField 的项目时,通过 ajax 填充第二个 ChoiceField。
填充它的模板如下:
{% 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 而引起的,这不是我关心的。
我做错了什么?
最佳答案
ChoiceField 需要有 choices
放。这些不仅决定了下拉列表中显示的内容,而且对您来说重要的是,它还决定了提交表单时应接受哪些值。
让我解释一下您的情况。您的选择最初设置为:
CHOICES = (
('', '-- choisir un type en premier')
)
这意味着唯一接受的是空白选择(元组中的第一个条目 ''
是字段的实际值,而 choisir...
是文本值)。
所以当你添加<option>
时通过 Javascript 的元素,它们的值不会在 CHOICES
中,因此当您提交该表单时,它们会被 Django 拒绝。 10 不在 CHOICES
中.
表单提交到的 View 应该查看提交给它的选项的值,然后更改 CHOICES
的值相应地传递到 ChoiceField。
关于Django表单不验证: "Select a valid choice. 20 is not one of the available choices",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173196/