具有SelectMultiple小部件的MultipleChoiceField"值[...]不是有效选择."

dpe*_*ers 2 forms django select field django-models

我的模型中定义了一个字段 -

    languages = models.CharField(max_length = 30, choices=LANGUAGE_CHOICES, blank = True, null = True)
Run Code Online (Sandbox Code Playgroud)

选择很简单 -

LANGUAGE_CHOICES = (
    ('English', 'English'),
)
Run Code Online (Sandbox Code Playgroud)

我在这个模型上定义了一个ModelForm并覆盖了该字段 -

languages = forms.MultipleChoiceField(choices=LANGUAGE_CHOICES, widget=forms.SelectMultiple)
Run Code Online (Sandbox Code Playgroud)

当我填写表格时,选择"英语",并尝试提交,我收到错误 -

语言
价值u"[u'English']"不是一个有效的选择

有什么基本的我做错了吗?或者,MultipleChoiceField与SelectMultiple小部件结合使用的方式不是很好吗?

另外,有没有理由为什么选择元组不能两次具有相同的值,就像我现在拥有的那样('英语','英语')?

这里有一些额外的代码可能有助于深入了解这一点

模板代码:

<div class="abovepad">
<label for="id_languages">Languages:</label>
    {{form.languages}}
</div>
Run Code Online (Sandbox Code Playgroud)

具有以下语言的POST数据部分:

u'languages': [u'English'],
Run Code Online (Sandbox Code Playgroud)

ModelForm代码的相关片段:

class ProfileForm(forms.ModelForm):        
languages = forms.MultipleChoiceField(choices=LANGUAGE_CHOICES)
class Meta:
    model = Student
Run Code Online (Sandbox Code Playgroud)

如你所见,我几乎没有定制任何东西.在我遇到这个问题的过去,我会切换到列表中的项目为模型,然后使用ManyToMany字段,这不会导致相同的问题.对于那些情况,让项目成为模型是有意义的; 在这种情况下它没有.我只是想知道我做错了什么,或者这个组合是不是应该工作.如果没有真正的答案,那么我的另一个选择就是尝试挖掘Django表单代码,看看它为什么要这样做.

小智 8

您必须choices=LANGUAGE_CHOICES模型 定义中删除:您的表单返回的是所选值的列表,该列表中不存在models.LANGUAGE_CHOICES

  • 我很惊讶这个答案没有得到应有的重视。我遇到了与OP完全相同的问题,而这个答案为我节省了很多调试时间! (2认同)