2012-04-20 93 views
-1

我在驗證forms.ChoiceField時遇到問題。我有兩個表格/模型Django表單驗證模型選擇

class City(models.Model): 
    ... 
    name = models.CharField(max_length=64) 
    ... 

class ShoppingCenter(models.Model): 
    ... 
    name = models.CharField(max_length=64) 
    city = models.ForeignKey(City) 

人們可以在城市和購物中心註冊他們的活動。但因爲有很多城市和更多的購物中心,我想限制購物中心的選擇到選定的城市。我創建了一個帶CharField的城市名稱和一個空的ChoiceField。

用戶在CharField中使用ajax/jquery自動填充進入城市後,我使用ajax/jquery填充ShoppingCenter ChoiceField的值。

所有似乎工作。我輸入了一個有效的城市,並且JavaScript填充了ShoppingCenter選擇字段的選項。

但是,當我想驗證此表單失敗。我越來越:

form_errors

{ 'shopping_centre_id':[u'Select一個有效的選擇。 1不是可用選項之一']}

雖然1是有效的購物中心ID,但它是從數據庫中選擇的。

我有另一個MultipleChoiceField是相同的形式,工作正常。兩者之間的唯一區別是MultipleChoiceField是使用標準Django生成的,ChoiceField是使用javascript(ajax + django)創建的。

現在我已經找到了一個解決方法,定義了我自己的clean方法,在該方法中,我從self._errors中刪除錯誤並將shopping_centre_id值添加到cleaned_data。

有誰知道什麼可能會導致驗證錯誤?

回答

-1

填寫choicesChoiceField表格的__init__。您可以從data提取城市名稱,檢索City,過濾購物中心並將其放入choices

但購物中心更好使用ModelChoiceField,因此您不必手動構建choices,而只需將查詢集傳遞給該字段。如果沒有data - 將會是ShoppingCenter.objects.none(),否則 - 按城市過濾。

+1

使用ModelChoiceField購物中心是不可能的恐怕因爲這取決於用戶填寫的城市。所以我不知道城市,當我顯示錶單時,我無法顯示購物清單中心。 – Henri 2012-04-21 14:17:33