Python 如何检查数据库中是否已存在电子邮件?
我想在注册表单中添加一个功能,如果电子邮件已经在数据库中,则此电子邮件已经注册。 我正在用下面的代码进行尝试,但这不起作用 accounts/forms.pyPython 如何检查数据库中是否已存在电子邮件?,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
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(“已存在该电子邮件的用户”)
返回电子邮件
确保将用户
模型中的电子邮件
设置为唯一