2010-07-31 47 views
4

我有一種情況,用戶可以在html表單上點擊一個複選框字段「field_enable」,一個好的jQuery操作將顯示另一個字段「fielda」,供用戶輸入更多的數據英寸當「field_enable」被選中時,我想要求用戶也填寫「fielda」。當「field_enable」未選中時,應允許用戶提交表單而不出錯。django clean_field引用其他字段

我希望所有的錯誤出現在字段上方的錯誤列表中,而不是整個表單的form.errors列表(這就是爲什麼我沒有使用表單的clean()方法)。因此,我在下面提出了這個代碼。

啓用/禁用邏輯工作得很好。當選中「field_enable」時,用戶必須填寫「fielda」,如果未選中,則用戶通過。但是,當檢查框時,要求用戶填寫更多信息,即使他們填寫了「fielda」的值,他們也會得到驗證錯誤「需要Fielda」。這違背了期望。

沒有人有任何建議,爲什麼「FIELDA」總是驗證失敗時「field_enable」被選中

class MyForm(forms.ModelForm): 

    def clean_fielda(self): 
     cleaned_data = self.cleaned_data 
     if cleaned_data.get("field_enable"): 
      raise forms.ValidationError("Fielda is required") 
     return cleaned_data['fielda'] 

class MyModel(models.Model): 
    field_enable = models.BooleanField(default=False) 
    fielda = models.CharField(max_length=128, blank=True, null=True) 

任何幫助是非常讚賞的模型的例子!

回答

5

你想,如果「field_enable」被檢查,你不必爲「field_a」的值,以提高驗證錯誤。像這樣(你錯過了「field_a」存在檢查):

class MyForm(forms.ModelForm): 

    def clean_fielda(self): 
     cleaned_data = self.cleaned_data 
     if cleaned_data.get("field_enable") and not cleaned_data.get('field_a'): 
      raise forms.ValidationError("Fielda is required") 
     return cleaned_data['fielda'] 
+0

哇,我簡直不敢相信它。我一定盯着它太久了:)我會試試看;謝謝你的幫助! – 2010-07-31 18:23:38