2

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

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

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

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

是什么导致了这个错误?

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

1 回答 1

0

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

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

在没有看到您的自定义clean_state()方法的情况下,我无法告诉您它出了什么问题,但是如果由于查询字符串错误而导致状态字段无效,那么“状态”将不会出现在cleaned_data 中(因为cleaned_data 仅包含有效数据)。

希望这会有所帮助。如果您仍然遇到困难,请尝试添加更多细节,我可以尝试更具体。

于 2013-07-14T00:56:32.857 回答