2013-11-25 89 views
0

目前還正在做的代碼(從形式):Django ValidationError - 如何正確使用它?

# the exception that gets raised if the form is not valid 
raise forms.ValidationError("there was an error"); 

# here is where form.is_valid is called 
form.is_valid() == False: 

    response['msg']=str(form.errors) 
    response['err']='row not updated.' 
    json = simplejson.dumps(response) #this json will get returned from the view. 

這裏的問題是,它發送錯誤號給客戶端:

  • __all__
    • 「有一個錯誤。」
  • 我想從返回的錯誤模板中刪除「全部」垃圾。我怎麼能這樣做呢?它似乎在django表單代碼中得到了深入。

    回答

    2

    這是因爲錯誤並沒有與任何字段相關聯,但它被稱爲非字段錯誤。

    如果你只在非現場錯誤感興趣,只需簡單地把它傳遞給響應:

    response['msg']=str(form.errors['__all__']) 
    
    1

    errorsdict有一些特殊的渲染代碼的子類的實例。大部分的按鍵都形式的領域,但隨着文檔描述,提高ValidationErrorclean產生不與任何特定領域相關的錯誤信息:

    請注意,您的形式提出的任何錯誤。 clean()重寫將不會與任何字段相關聯。他們進入一個特殊的「字段」(稱爲__all__),如果需要,您可以通過non_field_errors()方法訪問該字段。如果要將錯誤附加到表單中的特定字段,則需要訪問表單中的_errors屬性,稍後將對其進行介紹。

    https://docs.djangoproject.com/en/dev/ref/forms/validation/

    所以,你可以不同的(可能開始form.errors.values()form.errors.itervalues(),也許使用默認ErrorList類的as_text法)產生錯誤的您的字符串表示或你的錯誤與特定的關聯

    當你真的需要錯誤連接到一個特定的領域,你應該存儲(或修改)在Form._errors attribu的關鍵:在該文檔中描述的形式的領域TE。該屬性是django.forms.utils.ErrorDict類的一個實例。從本質上講,它只是一本字典。字典中有一個關鍵字,用於表單中每個字段有錯誤。字典中的每個值都是一個django.forms.utils.ErrorList實例,它是一個知道如何以不同方式顯示自身的列表。所以你可以把_errors作爲一個字典映射字段名稱到列表。

    如果你想添加一個新的錯誤到一個特定的領域,你應該檢查這個關鍵字是否已經存在於self._errors中。如果不是,則爲給定鍵創建一個新條目,並保存一個空的ErrorList實例。無論哪種情況,您都可以將錯誤消息附加到問題字段名稱的列表中,並在顯示錶單時顯示。

    https://docs.djangoproject.com/en/dev/ref/forms/validation/#form-subclasses-and-modifying-field-errors