2013-05-17 208 views
2

Django Documentation中,驗證互相依賴的字段的建議方法是使用表格的clean()方法。它是有道理的,但我正在處理的問題是如何通知視圖哪些字段導致問題。Django:驗證多個字段

當它只是一個領域誰是失敗的,我可以檢查它像這樣:

for field in form: 
    if field.errors: 
     # I know exactly in what field is the problem 

但是,如果錯誤來自clean()方法,我的一切是錯誤消息:

if form.errors: 
    for error in form.errors: 
     # I know there's a problem, and I got an error message, 
     # but I don't know what are the fields that cause it. 

在典型的註冊表格中,您必須寫兩次郵件和兩次密碼以避免輸入錯誤。舉例來說,如果兩個密碼字段的值不同,我想要更改這兩個密碼字段的CSS類,但在視圖中,我沒有提及導致問題的小部件。我唯一的信息是表單的clean()方法中的ValidationError引發的錯誤消息。我如何知道問題出在密碼字段還是電子郵件字段?我想解析這個錯誤信息不是要走的路。

回答

3

您可以添加一個字段級別的錯誤是這樣的:

self._errors["<field_name>"] = self.error_class([msg]) 

如果提高在clean一個ValidationError,這將導致非現場錯誤。請參閱documentation頁面的底部片段。

+0

我已經看到了,但問題是我所談論的錯誤涉及多個領域,而不僅僅是一個領域。 –

+1

這有什麼關係?當您自己設置錯誤時,_you_決定將顯示哪個字段。你在尋找'form.non_field_errors'嗎? –

+0

你說得對,謝謝你:-) –