Как вызвать несколько ValidationError в Django
Я видел этот пост: Как поднять несколько ValidationError на Django?
Однако у меня есть несколько вопросов. В принятом ответе andilabs пишет:
raise ValidationError({
'field_name_1': ["Field not allowed to change"],
'field_name_2': ["Field not allowed to change"],
})
Должны ли значения быть в списке, даже если это всего лишь одна строка? Если да, то кто-нибудь знает почему? Или где в документации об этом говорится? В https://docs.djangoproject.com/en/3.0/ref/forms/validation/#raising-multiple-errors.
я этого не нашел.Нижеприведенный код работает у меня, и в моем html шаблоне я могу сделать {{ form.user.errors }}, чтобы он отображался в div при отправке. Для тех, кому интересно, в каком контексте я его использую, я использую его в представлении Form, и внутри него у меня есть метод def clean(self), где я переопределяю родительский clean(). Некоторый код для справки:
class RegisterForm(forms.Form):
user = forms.CharField()
**the fields and stuff**
def clean(self):
error = {}
cleaned = super().clean()
if 'user' not in cleaned_data:
error['user'] = ['Username is empty']
**check if other fields are not there, check password length minimum, etc.**
if len(error) != 0:
raise ValidationError(error)
return cleaned
Из доктрины метода __init__ для ValidationError в django.core.exceptions:
"""
The `message` argument can be a single error, a list of errors, or a
dictionary that maps field names to lists of errors. What we define as
an "error" can be either a simple string or an instance of
ValidationError with its message attribute set, and what we define as
list or dictionary can be an actual `list` or `dict` or an instance
of ValidationError with its `error_list` or `error_dict` attribute set.
"""