2013-02-26 33 views
7

我有以下模型表單,並希望將自定義驗證添加到名爲'billable_work'的字段。Django ModelForm自定義驗證:如何訪問提交的字段值

如何訪問表單中提交的字段「項目」?我想檢查項目的值(下面例子中的'p'),但找不到合適的語法,以便我可以測試提交的值。任何幫助,將不勝感激。

class EntryForm(forms.ModelForm): 
    class Meta: 
     model = Entries 
     exclude = ('billable_work','notes') 

    billable_work = forms.BooleanField() 
    notes = forms.CharField(widget=forms.Textarea,required=False) 

    def clean_billable_work(self): 
     b = self.cleaned_data['billable_work'] 
     p = form.fields['project'] 

     if b == True and p == 523: 
      raise forms.ValidationError(_("Entries cannot be both billable and NONE: Indirect.")) 
     return self.cleaned_data['billable_work'] 

回答

12

我想你要重寫你的模型的clean()方法,而不是一個具體的表單域的清潔方法。從文檔 -

此方法應用於提供自定義模型驗證,並在需要時修改模型上的屬性以 。例如,您可以使用 自動爲字段提供值,或者執行 驗證,該驗證需要訪問多個字段。

如果你確實想要把驗證表單,然後在窗體上clean()方法提供了類似的功能(見docs)。

+1

感謝文檔中的鏈接。我正在尋找語法self.cleaned_data.get('project')。爲了測試我必須將其轉換爲字符串的值。這是一個合適的/有效的方法嗎? – Mrak 2013-02-26 19:12:51

+0

我不確定我關注? – 2013-02-26 19:31:07

相關問題