2016-11-07 61 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方法被调用。