Django确认电子邮件和确认密码返回无

Django确认电子邮件和确认密码返回无,django,django-forms,Django,Django Forms,我有一张这样的表格 class MyForm(Form): first_name = forms.CharField(max_length=128, widget=forms.TextInput(attrs={ 'placeholder': 'First Name', 'cla

我有一张这样的表格

class MyForm(Form):
    first_name = forms.CharField(max_length=128,
                                 widget=forms.TextInput(attrs={
                                     'placeholder': 'First Name',
                                     'class': "form-control"}),)
    last_name = forms.CharField(max_length=128,
                                widget=forms.TextInput(attrs={
                                    'placeholder': 'Last Name',
                                    'class': "form-control"}),)

    email = forms.EmailField(max_length=128,
                             widget=forms.TextInput(attrs={
                                 'placeholder': 'Email',
                                 'class': "form-control"}),)

    confirm_email = forms.EmailField(max_length=128,
                                     widget=forms.TextInput(attrs={
                                         'placeholder': 'Confirm Email',
                                         'class': "form-control"}),)

    password = forms.CharField(max_length=128,
                               widget=forms.PasswordInput(attrs={
                                   'placeholder': 'Password',
                                   'class': "form-control"}),)

    confirm_password = forms.CharField(max_length=128,
                               widget=forms.PasswordInput(attrs={
                                   'placeholder': 'Confirm Password',
                                   'class': "form-control"}),)

    def clean_email(self):
        cleaned_data = super(MyForm, self).clean()
        email = cleaned_data.get('email')
        confirm_email = cleaned_data.get('confirm_email')

        if not confirm_email:
            raise forms.ValidationError("Please confirm your email.")

        if email and confirm_email:
            if email != confirm_email:
                raise forms.ValidationError("Emails do not match")
        return confirm_email

    def clean_password(self):
        cleaned_data = super(MyForm, self).clean()

        pwd = cleaned_data.get('password')
        cpwd = cleaned_data.get('confirm_password')

        if not cpwd:
            raise forms.ValidationError("Please Confirm your Password")
        if pwd and cpwd:
            if pwd != cpwd:
                raise forms.ValidationError("Passwords do not match.")  #CNone

        return cpwd

    def clean(self, *args, **kwargs):
        self.clean_email()
        self.clean_password()
        return super(MyForm, self).clean()
confirm\u email
confirm\u passwor
d字段都返回了
None
,使得这些字段无法验证。我几乎不知道是什么导致了这个问题


我认为这是我的表单有问题,还是更可能是视图甚至模板有问题?

clean()方法是不必要的。。删除它。错误仍然存在。使用此配置,当电子邮件也不匹配时,不会引发
ValidationError
class MyForm(Form):
    first_name = forms.CharField(
        max_length=128,
        widget=forms.TextInput(
            attrs={'placeholder': 'First Name','class': "form-control"}
        ),
    )
    last_name = forms.CharField(
        max_length=128,
        widget=forms.TextInput(
            attrs={'placeholder': 'Last Name', 'class': "form-control"}
        ),
    )

    email = forms.EmailField(
        max_length=128,                 
        widget=forms.TextInput(
            attrs={'placeholder': 'Email', 'class': "form-control"}
        ),
    )

    confirm_email = forms.EmailField(
        max_length=128,
        widget=forms.TextInput(
            attrs={'placeholder': 'Confirm Email', n'class': "form-control"}
        ),
    )

    password = forms.CharField(
        max_length=128,
        widget=forms.PasswordInput(
            attrs={'placeholder': 'Password', 'class': "form-control"}
        ),
    )

    confirm_password = forms.CharField(
        max_length=128,
        widget=forms.PasswordInput(
            attrs={'placeholder': 'Confirm Password', 'class': "form-control"}
        ),
    )

    def clean_email(self):
        cdata = self.cleaned_data

        email = cdata['email']
        confirm_email = cdata.['confirm_email']

        if email and confirm_email:
            if email != confirm_email:
                raise forms.ValidationError("Emails do not match")

        return email

    def clean_confirm_email(self):
        cdata = self.cleaned_data

        confirm_email = cdata['confirm_email']

        if not confirm_email:
            raise forms.ValidationError("Please confirm your email.")

        return confirm_email

    def clean_password(self):
        cdata = self.cleaned_data

        password = cdata['password']
        confirm_password = cdata['confirm_password']

        if password and confirm_password:
            raise forms.ValidationError("Passwords do not match.")  

        return password

    def clean_confirm_password(self):
        cdata = self.cleaned_data

        confirm_password = cdata['confirm_password']

        if not confirm_password:
            raise forms.ValidationError("Please Confirm your Password")

        return confirm_password