Проверьте, существует ли уже электронная почта в базе данных

В моем приложении django account я хочу проверить, существует ли введенный email в базе данных (основной django db.sqlite3).

forms.py:

from django import forms
from django.contrib.auth.models import User


class UserRegistrationForm(forms.ModelForm):

    password = forms.CharField(label='Hasło', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Powtórz hasło', 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('Hasła nie są identyczne.')

        return cd['password2']

views.py:

def register(request):
    if request.method == "POST":
        user_form = UserRegistrationForm(request.POST)

        if user_form.is_valid():
            # Creating new user object, without saving in database
            new_user = user_form.save(commit=False)

            # Setting new password
            new_user.set_password(
                user_form.cleaned_data['password'])

            # Saving user object
            new_user.save()
            return render(request,
                          'account/register_done.html',
                          {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()

    return render(request,
                  'account/register.html',
                 {'user_form': user_form})

Теперь, когда я ввожу тот же email для другого пользователя, форма создает этого пользователя.

Я думаю, возможно ли сделать это таким образом? 1). сделать email такой же переменной, как пароль и пароль2 2). удалить email из meta 3). создать метод clean_email() с проверкой, существует ли email в db, если нет, то выдать ошибку

Я не знаю, как добраться до электронной почты в базе данных

Спасибо за помощь!

is_valid():in yourviews.py` делают это

if user_form.is_valid():
    new_user = user_form.save(commit=False)
    email=user_form.cleaned_data['email']
    if not User.objects.filter(email=email).exists():
        //the rest of your code 
    else:
       //some error message

Это гарантирует, что новый пользователь будет создан, только если он еще не существует.

Если вы работаете над приложением, которое требует имя пользователя, email и пароль длиной x (в данном случае 8), то сделайте следующее.

if not User.objects.filter(username=username).exists():
    if not User.objects.filter(email=email).exists():
        if len(password) < 8:
            // some error message alert 
            return('register') // the same page
        //continue with the rest of your code
        .....
    return ('login-page')
return('register') the same page

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

Вернуться на верх