Django如何以模型形式获取用户电子邮件

问题描述

所以我在Django中有个人资料更新表单,并且我是从ModelForm继承的。但是我无法通过self.request.user.email接收用户电子邮件


class  UserUpdateForm(forms.ModelForm):
    #Profile email 
    email=forms.EmailField()
    username=forms.CharField(required=True,validators=[username_check,])                                                            
    class Meta:
        model =User
        fields =['username','email']
                   
    def clean_email(self):
        form_useremail=self.cleaned_data.get("email").lower()
        if form_useremail!=self.request.user.email and User.objects.filter(username=form_username).exists():
            raise forms.ValidationError("Email already in use")
        else:
            return form_useremail

我收到此错误

'UserUpdateForm' object has no attribute 'request'

解决方法

您可以从 self.instance.email

访问用户的电子邮件

试试看,例如:

def clean_email(self):
    email = self.cleaned_data['email']
    user_email = self.instance.email
    if User.objects.filter(email = email).exists() and user_email.lower() != email.lower():
        raise forms.ValidationError('Email already in use')
    return email