Проверка уникальности email при регистрации django
Пытаюсь создать регистрацию на django. Столкнулся с проблемой, не могу проверить уникальность поля email при регистрации.
ursl.py
path('accounts/register/', MyRegisterFormView.as_view(), name="register"),
forms.py
class Register(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
views.py
class MyRegisterFormView(FormView):
# Указажем какую форму мы будем использовать для регистрации наших пользователей, в нашем случае
# это UserCreationForm - стандартный класс Django унаследованный
form_class = Register
# Ссылка, на которую будет перенаправляться пользователь в случае успешной регистрации.
success_url = "/accounts/login/"
# Шаблон, который будет использоваться при отображении представления.
template_name = "registration/register.html"
def form_valid(self, form):
form.save()
return super(MyRegisterFormView, self).form_valid(form)
def form_invalid(self, form):
return super(MyRegisterFormView, self).form_invalid(form)
Как можно реализовать это?
if User.objects.filter(email=email).exists():
messages.error(request, "Эта почта уже зарегестрированна")
Я понимаю что нужно сравнить email с фильтром и при совпадении вернуть ошибку, но не могу реализовать это. Как можно обратиться к полю формы email во views?
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
не понятно зачем ты в форму добавляешь еще одно поле email, если оно уже есть у модели User
class Register(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def clean(self):
cleaned_data = super().clean(self)
if User.objects.filter(email=cleaned_data.get('email')).exists():
self.fields.add_error('email', "Эта почта уже зарегестрированна")
return cleaned_data
после этого ты в шаблоне можешь обращаться к ошибкам формы
{{form.email.errors}}