[1.7.x] Fixed #24008 -- Fixed ValidationError crash with list of dicts.
Backport of 7a878ca5cb
from master
This commit is contained in:
parent
4abfa73c18
commit
8de2a44064
|
@ -118,7 +118,10 @@ class ValidationError(Exception):
|
|||
# Normalize plain strings to instances of ValidationError.
|
||||
if not isinstance(message, ValidationError):
|
||||
message = ValidationError(message)
|
||||
self.error_list.extend(message.error_list)
|
||||
if hasattr(message, 'error_dict'):
|
||||
self.error_list.extend(sum(message.error_dict.values(), []))
|
||||
else:
|
||||
self.error_list.extend(message.error_list)
|
||||
|
||||
else:
|
||||
self.message = message
|
||||
|
|
|
@ -186,3 +186,6 @@ Bugfixes
|
|||
|
||||
* Restored the ability to use more than five levels of subqueries
|
||||
(:ticket:`23758`).
|
||||
|
||||
* Fixed crash when ``ValidationError`` is initialized with a ``ValidationError``
|
||||
that is initialized with a dictionary (:ticket:`24008`).
|
||||
|
|
|
@ -45,9 +45,31 @@ class FormsUtilsTestCase(TestCase):
|
|||
self.assertHTMLEqual(str(ErrorList(ValidationError(["Error one.", "Error two."]).messages)),
|
||||
'<ul class="errorlist"><li>Error one.</li><li>Error two.</li></ul>')
|
||||
|
||||
# Can take a dict.
|
||||
self.assertHTMLEqual(
|
||||
str(ErrorList(sorted(ValidationError({'error_1': "1. Error one.", 'error_2': "2. Error two."}).messages))),
|
||||
'<ul class="errorlist"><li>1. Error one.</li><li>2. Error two.</li></ul>'
|
||||
)
|
||||
|
||||
# Can take a mixture in a list.
|
||||
self.assertHTMLEqual(str(ErrorList(ValidationError(["First error.", "Not \u03C0.", ugettext_lazy("Error.")]).messages)),
|
||||
'<ul class="errorlist"><li>First error.</li><li>Not π.</li><li>Error.</li></ul>')
|
||||
self.assertHTMLEqual(
|
||||
str(ErrorList(sorted(ValidationError([
|
||||
"1. First error.",
|
||||
"2. Not \u03C0.",
|
||||
ugettext_lazy("3. Error."),
|
||||
{
|
||||
'error_1': "4. First dict error.",
|
||||
'error_2': "5. Second dict error.",
|
||||
},
|
||||
]).messages))),
|
||||
'<ul class="errorlist">'
|
||||
'<li>1. First error.</li>'
|
||||
'<li>2. Not π.</li>'
|
||||
'<li>3. Error.</li>'
|
||||
'<li>4. First dict error.</li>'
|
||||
'<li>5. Second dict error.</li>'
|
||||
'</ul>'
|
||||
)
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class VeryBadError:
|
||||
|
|
Loading…
Reference in New Issue