Как сделать проверку имени пользователя и поля электронной почты - PullRequest
0 голосов
/ 06 июля 2019

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

forms.py

from django.forms import ModelForm
from django import forms
from . models import registration_form

class signup_form(ModelForm):
    Password = forms.CharField(widget=forms.PasswordInput())
    Confirm_pwd = forms.CharField(widget=forms.PasswordInput())
    class Meta:
        model = registration_form
        fields=['Firstname','Lastname','Username','Email','Password','Confirm_pwd']
    def clean(self):
        cleaned_data = super(signup_form, self).clean()
        password = cleaned_data.get("Password")
        confirm_password = cleaned_data.get("Confirm_pwd")
        print(confirm_password)

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

    def clean_Email(self):
        Email = self.cleaned_data.get('Email')
        try:
          match = registration_form.objects.get(Email=Email)
          print(match)
        except registration_form.DoesNotExist:
        # Unable to find a user, this is fine
          return Email
        raise forms.ValidationError('This email address is already in use.')    

Выдает ошибку как
MultipleObjectsReturned at /form/ get() returned more than one registration_form -- it returned 10!

Может ли кто-нибудь помочь мне достичь этого?

1 Ответ

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

Похоже, ваша модель registration_form не установлена ​​на unique=True в поле Email, а в вашем наборе данных имеется более одного объекта registration_form с указанным значением.Вам захочется обработать MultipleObjectsReturned.Другой рекомендацией было бы выполнить фильтр с учетом регистра:

match = registration_form.objects.get(Email__iexact=Email)

В конечном счете, вы можете обработать дублирующиеся записи с миграцией, сделать поле registration_form.Email unique=True и выполнить .get при обработкеисключение MultipleObjectsReturned:

def clean_Email(self):
    Email = self.cleaned_data.get('Email')
    try:
      match = registration_form.objects.get(Email__iexact=Email)
      print(match)
    except registration_form.DoesNotExist:
      # Unable to find a user, this is fine
      return Email
    except registration_form.MultipleObjectsReturned:
      # Pass here to hit the validation error
      pass
    raise forms.ValidationError('This email address is already in use.')

Вы можете просто настроить свой запрос, чтобы проверить: registration_form.objects.filter(Email__iexact=Email).exists()

def clean_Email(self):
    Email = self.cleaned_data.get('Email')
    match = registration_form.objects.filter(Email__iexact=Email).exists()

    if match:
        raise forms.ValidationError('This email address is already in use.')
    return Email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...