Как вызвать несколько 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.
    """

Ссылка на исходный код

Вернуться на верх