Python 如何正确验证Django表单中的MultipleChiceField

Python 如何正确验证Django表单中的MultipleChiceField,python,django,django-forms,Python,Django,Django Forms,我有一个表示美国各州的MultipleChoiceField,将GET请求传递给我的表单,如?state=AL%2CAK,会导致错误: Select a valid choice. AL,AK is not one of the available choices. 但是,这些值肯定列在字段选项中,因为它们在表单字段中正确呈现 我尝试在表单中指定一个自定义的clean_state()方法,将值转换为列表,但没有效果。打印已清理的_数据['state']似乎表明它甚至没有被来自request.G

我有一个表示美国各州的MultipleChoiceField,将GET请求传递给我的表单,如
?state=AL%2CAK
,会导致错误:

Select a valid choice. AL,AK is not one of the available choices.
但是,这些值肯定列在字段选项中,因为它们在表单字段中正确呈现

我尝试在表单中指定一个自定义的clean_state()方法,将值转换为列表,但没有效果。打印已清理的_数据['state']似乎表明它甚至没有被来自request.GET的数据调用

是什么导致了这个错误

from django import forms
class MyForm(forms.Form):
    state = forms.MultipleChoiceField(
        required=False,
        choices=[('AL','Alabama'),('AK','Alaska')],
    )

多个EchoiceFields不会传递列表中的所有选定值,而是为同一个键传递多个不同的值

换句话说,如果选择“AL”和“AK”,则查询字符串应该是
?state=AL&state=AK
,而不是
?state=AL%2CAK

如果没有看到自定义的
clean_state()
方法,我无法告诉您它出了什么问题,但是如果state字段由于querystring错误而无效,那么“state”将不在clean_数据中(因为clean_数据只保存有效数据)


希望这能有所帮助。如果您仍有困难,请尝试添加更多详细信息,我可以尝试更具体一些。

请向我们展示您的表单或您创建的供选择的字段。@AamirAdnan,Posted。它相当简单。当您只选择单一状态时,它是否有效?