запутался насчет метода django формы run_validators () - PullRequest
0 голосов
/ 15 марта 2011

рассмотрите эту форму:

class LoginForm(forms.Form):
    email = forms.EmailField(label="Email", required = True)
    password = forms.CharField(label="Password", widget=forms.PasswordInput(), required=True)

Когда я проверяю форму, я хочу использовать только один метод ошибки: «неверный адрес электронной почты и / или пароль», и это независимо от того, был ли это адрес электронной почтыполе, любое из полей пустое, или комбинация пароль / адрес электронной почты неверна.

После исследования я считаю (если не ошибаюсь), что мне нужно использовать run_validators() (из django docs ":«объединяет все ошибки в одну ValidationError»)

Однако я не совсем понимаю, как мне это определить.

1 Ответ

0 голосов
/ 15 марта 2011

Метод run_validators, на который вы указали, является методом для каждого поля, поэтому на самом деле не решает вашу проблему.Он объединяет несколько валидаторов для каждого поля, таких как «поле не может быть пустым», «не является адресом электронной почты» и т. Д., Чтобы вытащить первый неудачный валидатор.

Если вы хотите, чтобы сообщение показывало какую-либо ошибку,Я бы просто разобраться с этим в шаблоне.

Вы можете перефразировать ваши требования как «если форма недействительна, отобразить одно сообщение об ошибке», в противном случае, успешно войти в систему.

{% if form.errors %}
    invalid email and/or password
{% endif %}

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

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

def clean(self):
    for key, value in self._errors.iteritems():
        self._errors[key] = self.error_class(['invalid email and/or password'])
    return self.cleaned_data

Это также позаботится и об ошибках, не связанных с полем,как те, в том же духе.

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