如何在Django表单中正确验证MultipleChoiceField

时间:2013-07-12 20:56:49

标签: python django django-forms

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

Select a valid choice. AL,AK is not one of the available choices.

但是,这些值肯定会在字段选项中列出,因为它们会在表单字段中正确呈现。

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

导致此错误的原因是什么?

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

1 个答案:

答案 0 :(得分:0)

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

换句话说,如果您选择' AL'和' AK'您的查询字符串应为?state=AL&state=AK而不是?state=AL%2CAK

如果没有看到您的自定义clean_state()方法,我就无法告诉您它出了什么问题,但是如果状态字段因为查询字符串错误而无效,则#&#&#t} 39;状态'不会在cleaning_data中(因为cleaning_data只保存有效数据)。

希望这会有所帮助。如果您仍然陷入困境,请尝试添加更多详细信息,我可以尝试更具体。