Django form.is_valid всегда возвращает true - PullRequest
2 голосов
/ 04 мая 2011

Я новичок в Django и Python и пытаюсь выучить это из книги.В приведенном ниже коде я пытаюсь убедиться, что password1 и password2 совпадают, но, похоже, он не запускает проверку clean_password2, потому что она всегда возвращает true, даже если они имеют разные значения.

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

class RegistrationForm(forms.Form):
    username = forms.CharField(label=u'Username', max_length=30)
    email = forms.EmailField(label=u'Email')
    password1 = forms.CharField(
        label= u'Password',
        widget = forms.PasswordInput()
    )
    password2 = forms.CharField(
        label= u'Password (Again)',
        widget = forms.PasswordInput()
    )

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')

        if password1 != password2:
            raise forms.ValidationError('Passwords do not match.')
        return password2

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Если вы очищаете два поля, которые зависят друг от друга, вы должны переопределить метод clean() формы.Вы можете прочитать больше здесь .

1 голос
/ 04 мая 2011

Любой валидатор, которому требуется доступ к более чем одному полю, должен быть частью метода clean(), а не метода clean_<filedname>(). Узнайте, как django-registration делает то, что вы ищете: https://bitbucket.org/ubernostrum/django-registration/src/58eef8330b0f/registration/forms.py#cl-57

0 голосов
/ 04 мая 2011

Вы уверены, что проверяете form.is_valid() вместо form.is_valid? Это метод, а не свойство.

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