2014-12-25 65 views
0

我創建了一個自定義django用戶帳戶創建系統,該系統使用電子郵件using this example。我想將電子郵件和密碼都顯示爲「此字段爲必填」的錯誤消息合併爲一個錯誤消息,其中顯示「電子郵件和密碼字段不能留空」Django:合併字段錯誤消息

回答

0

您可以爲您的型號編寫Model.clean

class MyCustomUser(AbstractBaseUser): 
    usermail = models.EMailField(.......) 

    def clean(self): 
     if not self.usermail and not self.password: 
      raise ValidationError({'usermail': 'Mail address and Password are required!'}) 

這會引發驗證錯誤,指向您的usermail字段。

+0

這是行不通的 - usermail /密碼'UserCreationForm'所以「需要該領域的」異常需要將拋出他們。 – catavaran

1

你應該繼承forms.Form而不是forms.ModelFormUserCreationForm,定義了它的電子郵件/密碼字段與required=Falseclean()方法檢查這兩個領域。

事情是這樣的:

class UserCreationForm(forms.Form): 

    email = forms.EmailField(required=False) 
    password = forms.CharField(required=False, widget=forms.PasswordInput) 

    def clean(self): 
     email = self.cleaned_data.get('email') 
     password = self.cleaned_data.get('password') 
     if not (email and password): 
      raise forms.ValidationError(
          'email and password fields cannot be left blank') 

    def save(self, commit=True): 
     user = User(email=self.cleaned_data['email']) 
     user.set_password(self.cleaned_data['password']) 
     if commit: 
      user.save() 
     return user 
+0

重寫字段也將覆蓋它們的max_length參數。 '__init__'方法更好: super(UserCreationForm,self).__ init __(* args,** kwargs); self.fields ['email']。required = False; self.fields ['password']。required = False – imposeren

+0

如果您使用的是django 1.7,那麼使用self.add_error會更好。例如:'self.add_error(ValidationError(u'Email and password fields can not be left blank',code ='blank-fields'))' – imposeren