2016-11-07 65 views
0

我的病人,醫生有些機型等等,然後我用它們來創建基於的ModelForm一些附加字段的形式:創建混入檢查密碼

class CreateClinicForm(forms.ModelForm): 
    email = forms.EmailField(required=True) 
    name = forms.CharField(max_length=200, required=True) 
    specialties = forms.CharField(max_length=100, required=True) 
    phone = forms.IntegerField(required=True) 

    class Meta: 
     model = Clinic 
     fields = ('name', 'specialties') 

而且我有密碼檢查這些表單,所以使用mixin會很好。 我試圖創建這個,但它不起作用。

class PasswordMatchMixin(object): 
    password = forms.CharField(max_length=32, required=True) 
    password_confirm = forms.CharField(max_length=32, required=True) 

def clean_password_confirm(self): 
    password = self.cleaned_data.get('password') 
    password_confirm = self.cleaned_data.get('password_confirm') 
    if password and password != password_confirm: 
     raise ValidationError(_("Passwords don't match")) 
    return self.password_confirm 

當然,在那之後我把它添加到我的形式是這樣的:

class CreateDoctorForm(PasswordMatchMixin, forms.ModelForm) : ... 

一些想法或意見?

回答

0

如果您是cleaning fields that rely on each other,則應該覆蓋clean而不是clean_password

class PasswordMatchMixin(object): 
    password = forms.CharField(max_length=32, required=True) 
    password_confirm = forms.CharField(max_length=32, required=True) 

    def clean(self): 
     cleaned_data = super(PasswordMatchMixin, self).clean() 
     password = cleaned_data.get('password') 
     password_confirm = cleaned_data.get('password_confirm') 
     if password and password != password_confirm: 
      raise ValidationError(_("Passwords don't match")) 
     return cleaned_data 

如果在您的形式覆蓋clean,記得打電話super()使得PasswordMatchMixin.clean方法被調用。