Loading django/forms/widgets.py +1 −1 Original line number Diff line number Diff line Loading @@ -528,7 +528,7 @@ class CheckboxInput(Widget): values = {'true': True, 'false': False} if isinstance(value, six.string_types): value = values.get(value.lower(), value) return value return bool(value) def _has_changed(self, initial, data): # Sometimes data or initial could be None or '' which should be the Loading tests/regressiontests/forms/tests/forms.py +5 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,11 @@ class FormsTestCase(TestCase): f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False) 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): # Any Field can have a Widget class passed to its constructor: class ContactForm(Form): Loading tests/regressiontests/forms/tests/widgets.py +4 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,10 @@ class FormsWidgetTestCase(TestCase): # checkboxes). 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, '')) self.assertFalse(w._has_changed('', None)) Loading Loading
django/forms/widgets.py +1 −1 Original line number Diff line number Diff line Loading @@ -528,7 +528,7 @@ class CheckboxInput(Widget): values = {'true': True, 'false': False} if isinstance(value, six.string_types): value = values.get(value.lower(), value) return value return bool(value) def _has_changed(self, initial, data): # Sometimes data or initial could be None or '' which should be the Loading
tests/regressiontests/forms/tests/forms.py +5 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,11 @@ class FormsTestCase(TestCase): f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False) 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): # Any Field can have a Widget class passed to its constructor: class ContactForm(Form): Loading
tests/regressiontests/forms/tests/widgets.py +4 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,10 @@ class FormsWidgetTestCase(TestCase): # checkboxes). 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, '')) self.assertFalse(w._has_changed('', None)) Loading