@Nicknameme

Проблема с проверкой на уникальность email?

Привет всем. У меня есть форма для регистрации пользователя
forms.py:
from django import forms
from django.contrib.auth.models import User

class UserRegisrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat Password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'email')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords don\'t match.')
        return cd['password2']

    def clean_email(self):
        cd = self.cleaned_data
        if User.objects.get(email=cd['email']):
            raise forms.ValidationError('User with such mail exists. Use another.')
        return cd['email']

Проверка пароля работает отлично. Но частично работает проверка почты. Если при регистрации вписать почту уже существуюещго пользователя то все правильно работает, то есть выдает 'User with such mail exists. Use another.'. А если вписать другую почту которой нету в базе данных выдает ошибку при сохранении пользователя.

Internal Server Error: /account/register/
Traceback (most recent call last):
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\Desktop\dj\dj в примерах\глава 4 соц сеть\bookmarks\account\views.py", line 37, in register
if user_form.is_valid():
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\forms\forms.py", line 177, in is_valid
return self.is_bound and not self.errors
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\forms\forms.py", line 172, in errors
self.full_clean()
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\forms\forms.py", line 374, in full_clean
self._clean_fields()
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\forms\forms.py", line 395, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
File "C:\Users\User\Desktop\dj\dj в примерах\глава 4 соц сеть\bookmarks\account\forms.py", line 26, in clean_email
if User.objects.get(email=cd['email']):
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\User\Desktop\dj\movie\venv\lib\site-packages\django\db\models\query.py", line 429, in get
raise self.model.DoesNotExist(
django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.

Подскажите в чем проблема?
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
deepblack
@deepblack
User.objects.filter(email=email).exists()

Суть в том что если пользователь с таким email не найден, генерируется исключение.

Это происходит тут:
User.objects.get(email=cd['email'])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы