#django-views #django-forms
#django-просмотры #django-forms
Вопрос:
Во время регистрации в настоящее время, когда пользователь вводит существующее имя пользователя и адрес электронной почты, он получает уведомление о том, что это имя пользователя уже существует в базе данных. Когда пользователь вводит другое имя пользователя, но существующее электронное письмо, пользователь успешно создается в БД. Итак, я хочу проверить, существует ли электронная почта в базе данных. По этой причине я создал следующее, но, к сожалению, оно работает не так, как ожидалось (пользователь создается, если существует тот же адрес электронной почты).
forms.py файл
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms
class SignupForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def clean_email(self):
# Get the email
email = self.cleaned_data.get('email')
if User.objects.filter(email__iexact=email).exists():
raise forms.ValidationError("User with that email already exists")
return email
views.py файл
from django.shortcuts import render
from django.contrib.messages.views import SuccessMessageMixin
from django.views import generic
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from .forms import SignupForm
class UserRegisterView(SuccessMessageMixin, generic.CreateView):
form_class = SignupForm
template_name = 'registration/register.html'
success_url = reverse_lazy('login')
success_message = "Hello %(username)s! Your account has been created"
Спасибо за ваше время.
Комментарии:
1.
clean_email
Отступ должен быть таким, чтобы он был частьюSignupForm
.2. Спасибо, Виллем Ван Онсем, как вы поняли, я новичок в Django.
Ответ №1:
Потому что вы взяли электронную почту как dictinobary <объект ‘dict’ не вызывается> так, как список. Он работает над моим проектом
email = self.cleaned_data.get[’email’]
def clean_email(self):
# Get the email
email = self.cleaned_data.get['email']
if User.objects.filter(email__iexact=email).exists():
raise forms.ValidationError("User with that email already exists")
return email