summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/exceptions.py5
-rw-r--r--docs/releases/1.7.2.txt3
-rw-r--r--tests/forms_tests/tests/test_utils.py26
3 files changed, 31 insertions, 3 deletions
diff --git a/django/core/exceptions.py b/django/core/exceptions.py
index a8b432b1c6..a33fb36ea5 100644
--- a/django/core/exceptions.py
+++ b/django/core/exceptions.py
@@ -115,7 +115,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
diff --git a/docs/releases/1.7.2.txt b/docs/releases/1.7.2.txt
index c4938530e4..1070946d83 100644
--- a/docs/releases/1.7.2.txt
+++ b/docs/releases/1.7.2.txt
@@ -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`).
diff --git a/tests/forms_tests/tests/test_utils.py b/tests/forms_tests/tests/test_utils.py
index 6e40e7565c..9f412b7a27 100644
--- a/tests/forms_tests/tests/test_utils.py
+++ b/tests/forms_tests/tests/test_utils.py
@@ -65,9 +65,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: