Opened 10 years ago
Last modified 10 years ago
#24008 closed Bug
ValidationError crashes if initialised with a list that includes a ValidationError instance initialised with a dict. — at Initial Version
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
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