为什么我的覆盖clean_password函数不起作用?

时间:2012-06-03 01:48:34

标签: django django-forms

我是一个在Django中继承另一个表单的表单:

class RegistrationForm(forms.Form):
    ...
    def clean_password(self):
            if not re.search('[a-zA-Z]', self.data['password']):
                raise forms.ValidationError('Must contain a letter.')
            return self.data['password']

class addNewFamilyMemberForm(RegistrationForm):
    ...
    def clean_password(self):
        if self.data["username"]:
            super.clean_password(self)
        return self.data["password"]

为什么Django会产生这个错误?

type object 'super' has no attribute 'clean_password'

addNewMemberForm的超类显然具有clean_password功能。

2 个答案:

答案 0 :(得分:5)

在Python 2中,你需要像这样使用super:

super(addNewFamilyMemberForm, self).clean_password()

你应该以某种方式使用返回值,但我不确定如何。

此外,类名应以大写字母开头,但这不会影响它的工作方式。

答案 1 :(得分:1)

super实际上不是一个对象,你不能做“super.method”。也许您应该将该行更改为

super(addNewFamilyMemberForm, self).clean_password()