创建混入检查密码
问题描述:
我的病人,医生有些机型等等,然后我用它们来创建基于的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) : ...
一些想法或意见?
答
如果您是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
方法被调用。