Python 德扬戈:干净的房间里发生了奇怪的事情_

Python 德扬戈:干净的房间里发生了奇怪的事情_,python,django,Python,Django,所以这真的很奇怪。当我清理电子邮件时,我会收到一个错误,然后它会为emailConfirm打印“无”。当我做清洁时,它工作得非常好。出于某种原因,我得到了不同的结果,尽管我唯一要更改的是函数的名称(clean_email到clean_emailConfirm)。有人知道为什么吗 class SignUpForm(forms.ModelForm): fname = forms.CharField(max_length=256, label="", required=True, widget

所以这真的很奇怪。当我清理电子邮件时,我会收到一个错误,然后它会为emailConfirm打印“无”。当我做清洁时,它工作得非常好。出于某种原因,我得到了不同的结果,尽管我唯一要更改的是函数的名称(clean_email到clean_emailConfirm)。有人知道为什么吗

class SignUpForm(forms.ModelForm):
    fname = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'First Name','required':True}))
    lname = forms.CharField(max_length=256, label="", required=True, widget=forms.TextInput(attrs={'class': 'form-control','placeholder': 'Last Name','required':True}))
    email = forms.EmailField(max_length=256, label="", required=True, widget=forms.EmailInput(attrs={'class': 'form-control','placeholder': 'Email','required':True}))
    emailConfirm = forms.EmailField(max_length=256, label="", required=True, widget=forms.EmailInput(attrs={'class': 'form-control','placeholder': 'Email','required':True}))
    password = forms.CharField(max_length=256, label="", required=True, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder': 'Password','required':True}))
    datetime = forms.DateTimeInput()

    class Meta:
        model=SignUp
        fields=['fname','lname','email','emailConfirm','password']

    # def clean_email(self):    
    #   email=self.cleaned_data.get('email')
    #   emailConfirm=self.cleaned_data.get('emailConfirm')
    #   if email != emailConfirm:
    #       #print(cleaned_data2)
    #       print(email)
    #       print(emailConfirm)
    #       raise forms.ValidationError("Your two emails must be the same!")
    #   else:
    #       return email
    def clean_emailConfirm(self):   
        email=self.cleaned_data.get('email')
        emailConfirm=self.cleaned_data.get('emailConfirm')
        if emailConfirm != email:
            #print(cleaned_data2)
            print(email)
            print(emailConfirm)
            raise forms.ValidationError("Your two emails must be the same!")
        else:
            print(emailConfirm)
            print(email)
            return email

您不能交叉验证
clean\u foo
方法中的字段,因为当您在其中一个方法中时,并不是所有字段的
clean\u foo
方法都被调用,因此表单中可能有一些值尚未填充。应采用
clean
方法进行。非常明确地记录了这一点:

在调用表单的clean()方法时,所有 现场清理方法已经运行(前两部分),因此 self.cleaned_数据将填充到所有保存至今的数据中 远的因此,您还需要记住,考虑到以下事实: 您要验证的字段可能没有在初始验证中保留下来 个别现场检查


您不能交叉验证
clean\u foo
方法中的字段,因为当您在其中一个方法中时,并不是所有字段的
clean\u foo
方法都被调用,因此表单中可能有一些值尚未填充。应采用
clean
方法进行。非常明确地记录了这一点:

在调用表单的clean()方法时,所有 现场清理方法已经运行(前两部分),因此 self.cleaned_数据将填充到所有保存至今的数据中 远的因此,您还需要记住,考虑到以下事实: 您要验证的字段可能没有在初始验证中保留下来 个别现场检查