#python #django #sqlite #django-models #django-forms
#python #django #sqlite #django-модели #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
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'
Ответ №1:
в вашем UserCreateForm.clean_email
вы не проверяете это правильным образом. Вы проверяете этим if email in User.objects.all()
. Здесь email
это не User
объект. User.objects.all()
возвращает queryset
набор User
объектов. Поскольку, email
не является экземпляром User
, проверка вашего состояния не прошла успешно. Вместо этого выполните следующие действия, чтобы проверить, существует ли уже пользователь с предоставленным электронным письмом
def clean_email(self):
email = self.cleaned_data.get('email')
if email.split('.')[-1] != 'edu' :
raise forms.ValidationError("Only .edu email addresses allowed")
if User.objects.filter(email__iexact=email).exists():
raise forms.ValidationError("User with that email already exists")
return email
Убедитесь, что вы установили email
в своей User
модели значение быть unique
.
Ответ №2:
Вы неправильно выполняете проверку, она должна быть такой,
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