Multiple validation error messages

405 views
Skip to first unread message

Artem Artiukhov

unread,
Jun 8, 2021, 4:49:06 AM6/8/21
to Django REST framework

In def validate I'm gathering errors from multiple generic validation.

Before raise.ValidationError(errors), list "errors" looks like the following:

[ValidationError({'ra_reference_book': {'eic': 'Перевірте корректність коду EIC'}}), ValidationError({'ra_roles': [{'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-00900--F'}, {'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-02100--C'}]})]

or without nesting to "ValidationError" we have:

[{'ra_reference_book': {'eic': 'Перевірте корректність коду EIC'}}, {'ra_roles': [{'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-00900--F'}, {'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-02100--C'}]}]


However output does not seem to be satisfying in both cases:


if errors:
raise serializers.ValidationError({'details': errors})

{
"non_field_errors": "{'ra_reference_book': {'eic': ErrorDetail(string='Перевірте корректність коду EIC', code='invalid')}}\n{'ra_roles': [{'end_date_roles': ErrorDetail(string='Поле повинно мати значення', code='invalid'), 'domain': ErrorDetail(string='62Y-MGA-00900--F', code='invalid')}, {'end_date_roles': ErrorDetail(string='Поле повинно мати значення', code='invalid'), 'domain': ErrorDetail(string='62Y-MGA-02100--C', code='invalid')}]}"
}

or

{
"details": "{'ra_reference_book': {'eic': ErrorDetail(string='Перевірте корректність коду EIC', code='invalid')}}\n{'ra_roles': [{'end_date_roles': ErrorDetail(string='Поле повинно мати значення', code='invalid'), 'domain': ErrorDetail(string='62Y-MGA-00900--F', code='invalid')}, {'end_date_roles': ErrorDetail(string='Поле повинно мати значення', code='invalid'), 'domain': ErrorDetail(string='62Y-MGA-02100--C', code='invalid')}]}"
}

what should be fixed here to show "details"/"non_fields_error" in more readable way?

Nikeet NA

unread,
Jun 12, 2021, 9:33:03 PM6/12/21
to Django REST framework
If you want to return mutiple custom validations you need to create a dict object with fields, '__all__' or 'non_field_errors' as keys 
Like v_errors = dict()
v_errors['ra_reference_book'] =  {'eic': 'Перевірте корректність коду EIC'}
v_errors['ra_roles'] = [{'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-00900--F'}, {'end_date_roles': 'Поле повинно мати значення', 'domain': '62Y-MGA-02100--C'}]
Then you can do serializers.ValidationError(v_errors)
Reply all
Reply to author
Forward
0 new messages