mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #28555 -- Made CharField convert whitespace-only values to the empty_value when strip is enabled.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							79ae5811c7
						
					
				
				
					commit
					48c394a6fc
				
			| @@ -221,11 +221,12 @@ class CharField(Field): | |||||||
|  |  | ||||||
|     def to_python(self, value): |     def to_python(self, value): | ||||||
|         """Return a string.""" |         """Return a string.""" | ||||||
|  |         if value not in self.empty_values: | ||||||
|  |             value = str(value) | ||||||
|  |             if self.strip: | ||||||
|  |                 value = value.strip() | ||||||
|         if value in self.empty_values: |         if value in self.empty_values: | ||||||
|             return self.empty_value |             return self.empty_value | ||||||
|         value = str(value) |  | ||||||
|         if self.strip: |  | ||||||
|             value = value.strip() |  | ||||||
|         return value |         return value | ||||||
|  |  | ||||||
|     def widget_attrs(self, widget): |     def widget_attrs(self, widget): | ||||||
|   | |||||||
| @@ -120,6 +120,29 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase): | |||||||
|         self.assertEqual(f.clean(' 1'), ' 1') |         self.assertEqual(f.clean(' 1'), ' 1') | ||||||
|         self.assertEqual(f.clean('1 '), '1 ') |         self.assertEqual(f.clean('1 '), '1 ') | ||||||
|  |  | ||||||
|  |     def test_strip_before_checking_empty(self): | ||||||
|  |         """ | ||||||
|  |         A whitespace-only value, ' ', is stripped to an empty string and then | ||||||
|  |         converted to the empty value, None. | ||||||
|  |         """ | ||||||
|  |         f = CharField(required=False, empty_value=None) | ||||||
|  |         self.assertIsNone(f.clean(' ')) | ||||||
|  |  | ||||||
|  |     def test_clean_non_string(self): | ||||||
|  |         """CharField.clean() calls str(value) before stripping it.""" | ||||||
|  |         class StringWrapper: | ||||||
|  |             def __init__(self, v): | ||||||
|  |                 self.v = v | ||||||
|  |  | ||||||
|  |             def __str__(self): | ||||||
|  |                 return self.v | ||||||
|  |  | ||||||
|  |         value = StringWrapper(' ') | ||||||
|  |         f1 = CharField(required=False, empty_value=None) | ||||||
|  |         self.assertIsNone(f1.clean(value)) | ||||||
|  |         f2 = CharField(strip=False) | ||||||
|  |         self.assertEqual(f2.clean(value), ' ') | ||||||
|  |  | ||||||
|     def test_charfield_disabled(self): |     def test_charfield_disabled(self): | ||||||
|         f = CharField(disabled=True) |         f = CharField(disabled=True) | ||||||
|         self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />') |         self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user