Проверка электронной почты, если она уже существует? - PullRequest
0 голосов
/ 13 июня 2019

Здесь у меня есть две формы для добавления и обновления пользователя. Форма Регистрации работает нормально, чтобы проверить, существует ли уже электронная почта, но при обновлении пользователя она не работает должным образом. Проблема в том, когда я обновляю имя пользователя только это такжеговорит, что адрес электронной почты уже существует. Что я хочу при обновлении пользователя, если только пользователь меняет адрес электронной почты, а измененный адрес электронной почты уже используется, то я хочу вызвать ошибку проверки. Как я могу это сделать?

forms.py

class RegisterForm(UserCreationForm):

    def check_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise ValidationError('Email Already Exists')
        return email

    class Meta:
        model = User
        fields = ['username', "email", "password1", "password2", 'is_superuser', 'is_staff', 'is_active']


class EditRegisterForm(forms.ModelForm):

    def check_email(self):
        email = self.cleaned_data['email']
        email_exists = User.objects.filter(email=email)
        if self.instance and self.instance.pk and not email_exists
            return email

        else:
             raise ValidationError('Email already Exists')

    class Meta:
        model = User
        fields = ['username', "email", 'is_superuser','is_staff', 'is_active']

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вам нужно изменить логику здесь

if self.instance and self.instance.pk and User.objects.filter(email=email).exists():
    return email
1 голос
/ 13 июня 2019

Эта строка:

email_exists = User.objects.filter(email=email)

совпадает с адресом электронной почты текущего пользователя, поэтому она вызывает ошибку проверки «электронная почта уже существует».

Чтобы избежать этого, просто исключите текущийпользователь из набора запросов.

email_exists = User.objects.filter(email=email).exclude(pk=self.instance.pk)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...