2013-05-17 2 views
2

В Django Documentation предложенный способ проверки полей, которые зависят друг от друга, находится в методе clean() формы. Это имеет смысл, но проблема, с которой я имею дело, заключается в том, как уведомить мнение о том, какие поля вызывают проблемы.Django: проверка нескольких полей

Когда это только одно поле, кто терпит неудачу, я могу проверить это следующим образом:

for field in form: 
    if field.errors: 
     # I know exactly in what field is the problem 

Но если ошибка происходит от метода clean(), все, что я получил это сообщение об ошибке:

if form.errors: 
    for error in form.errors: 
     # I know there's a problem, and I got an error message, 
     # but I don't know what are the fields that cause it. 

Подумайте в типичной регистрационной форме, где вы должны дважды написать письмо и дважды пароль, чтобы избежать опечаток. Например, я хочу изменить класс CSS двух полей пароля, если они имеют разные значения, но в представлении у меня нет ссылки на виджет, вызывающий проблему. Единственная информация, которая у меня есть, - это сообщение об ошибке, выведенное ValidationError в методе clean() формы. Как узнать, связана ли проблема с полями пароля или полями электронной почты? И я думаю, что разбор этого сообщения об ошибках - это не выход.

ответ

3

Вы можете добавить ошибку на уровне поля, как это:

self._errors["<field_name>"] = self.error_class([msg]) 

Если вы поднимаете в cleanValidationError, это приведет к ошибке, не поле. См. Нижний фрагмент на странице documentation.

+0

Я видел это, но проблема в том, что ошибка, о которой я говорю, включает в себя несколько полей, а не только одну. –

+1

Как это важно? Когда вы устанавливаете ошибку самостоятельно, вы определяете, какое поле (и) оно будет отображаться. Вы ищете 'form.non_field_errors'? –

+0

Вы правы, спасибо :-) –

Смежные вопросы