diff options
| author | Andrey Maslov <greyzmeem@gmail.com> | 2014-12-23 17:51:36 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-12-31 14:46:17 -0500 |
| commit | 8de2a44064ca11749579a5887f59821fa35e1fdc (patch) | |
| tree | c00eed71805594a8af624fcb4c6b4df1fa763cd4 | |
| parent | 4abfa73c1861c53d43f0448726346866b04b9b72 (diff) | |
[1.7.x] Fixed #24008 -- Fixed ValidationError crash with list of dicts.
Backport of 7a878ca5cb50ad65fc465cb263a44cc93629f75c from master
| -rw-r--r-- | django/core/exceptions.py | 5 | ||||
| -rw-r--r-- | docs/releases/1.7.2.txt | 3 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_utils.py | 26 |
3 files changed, 31 insertions, 3 deletions
diff --git a/django/core/exceptions.py b/django/core/exceptions.py index 28e712e0a5..0e333d06e5 100644 --- a/django/core/exceptions.py +++ b/django/core/exceptions.py @@ -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 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 f909bb9893..e7d87b8a51 100644 --- a/tests/forms_tests/tests/test_utils.py +++ b/tests/forms_tests/tests/test_utils.py @@ -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: |
