mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.5.x] Fixed #16820 -- Treated '0' value as True for checkbox inputs
Thanks Dan Fairs for the report and the initial patch.
Backport of be29329cc from master.
			
			
This commit is contained in:
		| @@ -528,7 +528,7 @@ class CheckboxInput(Widget): | |||||||
|         values = {'true': True, 'false': False} |         values = {'true': True, 'false': False} | ||||||
|         if isinstance(value, six.string_types): |         if isinstance(value, six.string_types): | ||||||
|             value = values.get(value.lower(), value) |             value = values.get(value.lower(), value) | ||||||
|         return value |         return bool(value) | ||||||
|  |  | ||||||
|     def _has_changed(self, initial, data): |     def _has_changed(self, initial, data): | ||||||
|         # Sometimes data or initial could be None or '' which should be the |         # Sometimes data or initial could be None or '' which should be the | ||||||
|   | |||||||
| @@ -269,6 +269,11 @@ class FormsTestCase(TestCase): | |||||||
|         f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False) |         f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False) | ||||||
|         self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" />') |         self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" />') | ||||||
|  |  | ||||||
|  |         # A value of '0' should be interpreted as a True value (#16820) | ||||||
|  |         f = SignupForm({'email': 'test@example.com', 'get_spam': '0'}) | ||||||
|  |         self.assertTrue(f.is_valid()) | ||||||
|  |         self.assertTrue(f.cleaned_data.get('get_spam')) | ||||||
|  |  | ||||||
|     def test_widget_output(self): |     def test_widget_output(self): | ||||||
|         # Any Field can have a Widget class passed to its constructor: |         # Any Field can have a Widget class passed to its constructor: | ||||||
|         class ContactForm(Form): |         class ContactForm(Form): | ||||||
|   | |||||||
| @@ -225,6 +225,10 @@ class FormsWidgetTestCase(TestCase): | |||||||
|         # checkboxes). |         # checkboxes). | ||||||
|         self.assertFalse(w.value_from_datadict({}, {}, 'testing')) |         self.assertFalse(w.value_from_datadict({}, {}, 'testing')) | ||||||
|  |  | ||||||
|  |         value = w.value_from_datadict({'testing': '0'}, {}, 'testing') | ||||||
|  |         self.assertIsInstance(value, bool) | ||||||
|  |         self.assertTrue(value) | ||||||
|  |  | ||||||
|         self.assertFalse(w._has_changed(None, None)) |         self.assertFalse(w._has_changed(None, None)) | ||||||
|         self.assertFalse(w._has_changed(None, '')) |         self.assertFalse(w._has_changed(None, '')) | ||||||
|         self.assertFalse(w._has_changed('', None)) |         self.assertFalse(w._has_changed('', None)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user