Подтвердить что ты не робот

Индивидуальная проверка формы

У меня довольно простая форма:

from django import forms

class InitialSignupForm(forms.Form):
    email = forms.EmailField()
    password = forms.CharField(max_length=255, widget = forms.PasswordInput)
    password_repeat = forms.CharField(max_length=255, widget = forms.PasswordInput)

    def clean_message(self):
        email = self.clean_data.get('email', '')
        password = self.clean_data.get('password', '')
        password_repeat = self.clean_data.get('password_repeat', '')

        try:
            User.objects.get(email_address = email)
            raise forms.ValidationError("Email taken.")
        except User.DoesNotExist:
            pass

        if password != password_repeat:
            raise forms.ValidationError("The passwords don't match.")

Является ли это тем, как производится проверка правильности формы? Мне нужно оценить email, что ни один пользователь не существует с этим адресом электронной почты. Мне также необходимо оценить соответствие password и password_repeat. Как я могу это сделать?

4b9b3361

Ответ 1

Для проверки отдельного поля на нем вы можете использовать метод clean_FIELDNAME() в своей форме, поэтому для электронной почты:

def clean_email(self):
    email = self.cleaned_data['email']
    if User.objects.filter(email=email).exists():
        raise ValidationError("Email already exists")
    return email

то для зависимых друг от друга полей, которые полагаются друг на друга, вы можете перезаписать метод clean(), который запускается после того, как все поля (например, email выше) были проверены индивидуально:

def clean(self):
    form_data = self.cleaned_data
    if form_data['password'] != form_data['password_repeat']:
        self._errors["password"] = ["Password do not match"] # Will raise a error message
        del form_data['password']
    return form_data

Я не уверен, откуда вы получили clean_message(), но похоже, что это метод проверки, сделанный для поля message, который, похоже, не существует в вашей форме.

Прочитайте это для более подробной информации:

https://docs.djangoproject.com/en/dev/ref/forms/validation/