2011-03-15 52 views
0

考慮這種形式:困惑Django的形式run_validators()方法

class LoginForm(forms.Form): 
    email = forms.EmailField(label="Email", required = True) 
    password = forms.CharField(label="Password", widget=forms.PasswordInput(), required=True) 

當我驗證表單,我想使用只是一個錯誤的方法:「無效的電子郵件和/或密碼」,這無論是否不是電子郵件字段,任何字段是空白的,還是密碼/電子郵件的組合都不正確。

研究之後,我相信(除非我是錯的),我需要使用run_validators()(從Django文檔「:‘彙集了所有的錯誤到一個單一的ValidationError’)

但是我對我應該怎麼困惑定義這個

回答

0

你指出的run_validators方法是每場方法,所以並不能真正解決你的問題,它彙總了多個每場驗證器,比如「字段不能爲空」,「不是電子郵件地址「等等來拔出第一個失敗的驗證器。

如果你想要任何錯誤顯示該消息,我只是在模板中處理它。

你可以修改你的要求,「如果表單無效,顯示一個錯誤消息」,否則,成功登錄。

{% if form.errors %} 
    invalid email and/or password 
{% endif %} 

我不明白爲什麼你要修改的理由你的表格具有相同的最終效果,,但我想這沒什麼好玩的

如果您希望每場錯誤出於任何原因,下面是我提出的用於覆蓋所有錯誤的解決方案。

def clean(self): 
    for key, value in self._errors.iteritems(): 
     self._errors[key] = self.error_class(['invalid email and/or password']) 
    return self.cleaned_data 

這將照顧非現場錯誤,因爲那些在同一個字典。