Fixed #23129 -- Added 'true' and 'false' to `NullBooleanField`.
JavaScript serializations of forms will sometimes render the boolean values as the strings 'true' and 'false', in lower case. Rather than repeat boilerplate in the JavaScript to circumvent this, it seems reasonable to allow Django to understand the lower-case versions of the booleans.
This commit is contained in:
parent
096a5de5d2
commit
17e75d03f9
|
@ -753,13 +753,15 @@ class NullBooleanField(BooleanField):
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
"""
|
"""
|
||||||
Explicitly checks for the string 'True' and 'False', which is what a
|
Explicitly checks for the string 'True' and 'False', which is what a
|
||||||
hidden field will submit for True and False, and for '1' and '0', which
|
hidden field will submit for True and False, for 'true' and 'false',
|
||||||
is what a RadioField will submit. Unlike the Booleanfield we need to
|
which are likely to be returned by JavaScript serializations of forms,
|
||||||
explicitly check for True, because we are not using the bool() function
|
and for '1' and '0', which is what a RadioField will submit. Unlike
|
||||||
|
the Booleanfield we need to explicitly check for True, because we are
|
||||||
|
not using the bool() function
|
||||||
"""
|
"""
|
||||||
if value in (True, 'True', '1'):
|
if value in (True, 'True', 'true', '1'):
|
||||||
return True
|
return True
|
||||||
elif value in (False, 'False', '0'):
|
elif value in (False, 'False', 'false', '0'):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1000,6 +1000,8 @@ class FieldsTests(SimpleTestCase):
|
||||||
self.assertEqual(None, f.clean('2'))
|
self.assertEqual(None, f.clean('2'))
|
||||||
self.assertEqual(None, f.clean('3'))
|
self.assertEqual(None, f.clean('3'))
|
||||||
self.assertEqual(None, f.clean('hello'))
|
self.assertEqual(None, f.clean('hello'))
|
||||||
|
self.assertEqual(True, f.clean('true'))
|
||||||
|
self.assertEqual(False, f.clean('false'))
|
||||||
|
|
||||||
def test_nullbooleanfield_2(self):
|
def test_nullbooleanfield_2(self):
|
||||||
# Make sure that the internal value is preserved if using HiddenInput (#7753)
|
# Make sure that the internal value is preserved if using HiddenInput (#7753)
|
||||||
|
|
Loading…
Reference in New Issue