mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Fixed #24008 -- Fixed ValidationError crash with list of dicts.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							a1487deebf
						
					
				
				
					commit
					7a878ca5cb
				
			| @@ -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 | ||||
|   | ||||
| @@ -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`). | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user