Python 如何检查数据库中是否已存在电子邮件?

Python 如何检查数据库中是否已存在电子邮件?,python,django,sqlite,django-models,django-forms,Python,Django,Sqlite,Django Models,Django Forms,我想在注册表单中添加一个功能,如果电子邮件已经在数据库中,则此电子邮件已经注册。 我正在用下面的代码进行尝试,但这不起作用 accounts/forms.py from django.contrib.auth import get_user_model from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm

我想在注册表单中添加一个功能,如果电子邮件已经在数据库中,则此电子邮件已经注册。 我正在用下面的代码进行尝试,但这不起作用

accounts/forms.py

from django.contrib.auth import get_user_model
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class UserCreateForm(UserCreationForm):

    # email = forms.EmailField()
    class Meta:
        fields = ["username","email","password1","password2"]
        model = get_user_model()
        
    def clean_email(self):
            email = self.cleaned_data.get('email')
            if email in User.objects.all():
                raise forms.ValidationError("This email is already register")
            return email
    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].label = 'Display Name'
        # self.fields['email'].label = 'Email Address'

您以错误的方式运行验证,应该是

class UserCreateForm(UserCreationForm):
    # rest of your code

    def clean_email(self):
        email = self.cleaned_data["email"]
        if User.objects.filter(email__iexact=email).exists():
            raise forms.ValidationError("Only .edu email addresses allowed")
        return email
类UserCreateForm(UserCreationForm):
#代码的其余部分
def clean_电子邮件(自我):
电子邮件=自我清理的数据[“电子邮件”]
如果User.objects.filter(email\uu iexact=email).exists():
raise forms.ValidationError(“仅允许使用.edu电子邮件地址”)

在您的
用户创建表单中返回电子邮件
。清除电子邮件
您没有以正确的方式检查它。您正在通过此
检查电子邮件是否存在User.objects.all()
。这里的
电子邮件
不是
用户
对象
User.objects.all()
返回
User
对象的
queryset
。因为,
email
不是
User
的实例,所以您的条件检查不成功。而是执行以下操作以检查用户是否已使用提供的电子邮件

def clean_电子邮件(self):
email=self.cleanned\u data.get('email'))
如果email.split('.')[-1]!='埃杜:
raise forms.ValidationError(“仅允许使用.edu电子邮件地址”)
如果User.objects.filter(email\uu iexact=email).exists():
raise forms.ValidationError(“已存在该电子邮件的用户”)
返回电子邮件
确保将
用户
模型中的
电子邮件
设置为
唯一