Ошибка в проверке электронной почты Django в модельных формах (регистрация) - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь проверить адрес электронной почты в форме регистрации, если пользователь с таким адресом электронной почты уже существует, должен появиться сообщение об ошибке, такое как электронная почта уже существует, но я не могу добиться этого с помощью приведенных ниже кодовых форм

.py

from django.forms import ModelForm
from django import forms
from . models import signup

class signupForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)
    confirm_password = forms.CharField(widget=forms.PasswordInput)
    class Meta:
        model = signup
        fields = ['username', 'email' , 'password','confirm_password']
    def clean(self):
        cleaned_data = super(signupForm, self).clean()
        password = cleaned_data.get("password")
        confirm_password = cleaned_data.get("confirm_password")


        if password != confirm_password:
            raise forms.ValidationError(
                "password and confirm_password does not match"
            )    
        email = self.cleaned_data.get('email')
        try:
            match = signup.objects.get(email=email)
            print(match)
        except signup.DoesNotExist:
            # Unable to find a user, this is fine
            return email

        # A user was found with this as a username, raise an error.
        raise forms.ValidationError('This email address is already in use.')
class loginForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)
    class Meta:
        model = signup
        fields = ['email','password']

он показывает AttributeError в / signup 'str' объект не имеет атрибута 'get' this error

1 Ответ

0 голосов
/ 05 июля 2019

Вы возвращаете строку электронной почты из метода clean, если не найдено совпадений. Но основной метод clean должен возвращать весь текст cleaned_data, а не отдельное поле.

В любом случае, эта часть логики проверки должна идти в конкретном методе clean_email, который делает необходимым для возврата строки электронной почты. Таким образом, вы должны иметь:

def clean_email(self):
    email = self.cleaned_data.get('email')
    try:
        match = signup.objects.get(email=email)
        print(match)
    except signup.DoesNotExist:
        # Unable to find a user, this is fine
        return email

    # A user was found with this as a username, raise an error.
    raise forms.ValidationError('This email address is already in use.')

def clean(self):
    cleaned_data = super(signupForm, self).clean()
    password = cleaned_data.get("password")
    confirm_password = cleaned_data.get("confirm_password")


    if password != confirm_password:
        raise forms.ValidationError(
            "password and confirm_password does not match"
        )
    return cleaned_data

(И обратите внимание, этот вопрос не имеет ничего общего, но ваша форма входа не должна быть ModelForm; это приведет к другим проблемам с проверкой.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...