Opened 9 years ago

Last modified 9 years ago

#24008 closed Bug

ValidationError crashes if initialised with a list that includes a ValidationError instance initialised with a dict. — at Version 1

Reported by: Sean Owned by: nobody
Component: Core (Other) Version: 1.7
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Tim Graham)

According to the documentation, ValidationError can be initialised with a list of ValidationError instances. However, if the list includes a ValidationError that was initialised with a dictionary then it crashes with the following error: 'ValidationError' object has no attribute 'error_list'.

This bug would occur if someone wanted to raise a ValidationError with a set of field errors together with one or more non-field errors for example.

For example:

>>> from django.core.exceptions import ValidationError
>>> ValidationError([ValidationError({'age', 'age cannot be negative'}), ValidationError('Some other error')])

The problem is caused because when a ValidationError instance is initialised with a dictionary, its error_list attribute is not set (instead error_dict is set) but a ValidationError that is initialised with a list tries to compile a flattened list of all errors using this attribute from each list element. Either ValidationError should be modified to accept a mixture of field and non-field errors (appears to me to be the best solution) or the documentation and error message should be changed to make usage clear.

Related to https://code.djangoproject.com/ticket/23976

Change History (1)

comment:1 by Tim Graham, 9 years ago

Component: UncategorizedCore (Other)
Description: modified (diff)
Triage Stage: UnreviewedAccepted
Type: UncategorizedBug
Version: 1.61.7
Note: See TracTickets for help on using tickets.
Back to Top