2013-07-12 73 views
2

驗證MultipleChoiceField我有一個MultipleChoiceField代表美國各州,並通過一個GET請求我的窗體像?state=AL%2CAK導致錯誤:如何正確的Django的形式

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

但是,這些值肯定上市在字段選項中,因爲它們正確地在表單域中呈現。

我試過在我的表單中指定一個自定義的clean_state()方法,將該值轉換爲一個列表,但沒有任何效果。打印清空數據['狀態']似乎表明它甚至沒有被request.GET中的數據調用。

什麼原因導致此錯誤?

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

請向我們展示您的表格或僅爲您創建的字段進行選擇。 –

+0

@AamirAdnan,發佈。這很簡單。 – Cerin

+0

它只在選擇單個狀態時纔會生效嗎? –

回答

0

MultipleChoiceFields未通過所有在列表中選擇值的,他們通過幾個不同的值相同的密鑰來代替。換句話說,如果你選擇'AL'和'AK',你的查詢字符串應該是?state=AL&state=AK而不是?state=AL%2CAK

沒有看到您的自定義clean_state()方法我不能告訴你它出了什麼問題,但是如果狀態字段因查詢字符串錯誤而無效,那麼'state'將不在clean_data中(因爲僅用於清空數據保存有效數據)。

希望有幫助。如果你仍然堅持嘗試添加更多的細節,我可以嘗試更具體。