Добавление идентифицируемых неполевых ошибок - PullRequest
0 голосов
/ 21 февраля 2020

Я выполняю некоторую пользовательскую проверку в методе clean в ModelForm. Я хочу добавить пользовательские сообщения об ошибках без полей, но мне нужно, чтобы их можно было идентифицировать по какому-то ключу, чтобы это не сработало:

self.add_error(None, 'Custom error message 1')
self.add_error(None, 'Custom error message 2')
self.add_error(None, 'Custom error message 3')

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

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

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

class MyForm(forms.Form):
    def add_non_field_error(self, group, error):
        errors = self._errors.setdefault(group, self.error_class(error_class='nonfield'))
        errors.append(error)


f = MyForm(data={})
f.is_valid()  # True
f.add_non_field_error('no_field', 'This is an error.')
f.is_valid()  # False
f.errors  # {'no_field': ['This is an error.']}
1 голос
/ 21 февраля 2020

Используйте класс ValidationError, который поддерживает параметр code в своем инициализаторе. Затем вместо получения строк для non_field_errors() извлеките фактическую data:

self.add_error('__all__', ValidationError("Custom error message", code="type1")
...
for error in self.non_field_errors().data:  # non_field_errors() returns an ErrorList instance
     print(error.code)
...