diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 05f16db..02c69c2 100644
a
|
b
|
class BooleanField(Field):
|
524 | 524 | return "BooleanField" |
525 | 525 | |
526 | 526 | def to_python(self, value): |
527 | | if value in (True, False): return value |
528 | | if value in ('t', 'True', '1'): return True |
529 | | if value in ('f', 'False', '0'): return False |
| 527 | if value in (True, False): |
| 528 | # if value is 1 or 0 than it's equal to True or False, but we want |
| 529 | # to return a true bool for semantic reasons. |
| 530 | return bool(value) |
| 531 | if value in ('t', 'True', '1'): |
| 532 | return True |
| 533 | if value in ('f', 'False', '0'): |
| 534 | return False |
530 | 535 | raise exceptions.ValidationError(self.error_messages['invalid']) |
531 | 536 | |
532 | 537 | def get_prep_lookup(self, lookup_type, value): |
… |
… |
class NullBooleanField(Field):
|
934 | 939 | return "NullBooleanField" |
935 | 940 | |
936 | 941 | def to_python(self, value): |
937 | | if value in (None, True, False): return value |
938 | | if value in ('None',): return None |
939 | | if value in ('t', 'True', '1'): return True |
940 | | if value in ('f', 'False', '0'): return False |
| 942 | if value is None: |
| 943 | return None |
| 944 | if value in (True, False): |
| 945 | return bool(value) |
| 946 | if value in ('None',): |
| 947 | return None |
| 948 | if value in ('t', 'True', '1'): |
| 949 | return True |
| 950 | if value in ('f', 'False', '0'): |
| 951 | return False |
941 | 952 | raise exceptions.ValidationError(self.error_messages['invalid']) |
942 | 953 | |
943 | 954 | def get_prep_lookup(self, lookup_type, value): |
diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py
index 18bfbd3..1ee92d4 100644
a
|
b
|
class BooleanFieldTests(unittest.TestCase):
|
107 | 107 | self.assertEqual(f.get_db_prep_lookup('exact', '0', connection=connection), [False]) |
108 | 108 | self.assertEqual(f.get_db_prep_lookup('exact', 0, connection=connection), [False]) |
109 | 109 | self.assertEqual(f.get_db_prep_lookup('exact', None, connection=connection), [None]) |
| 110 | |
| 111 | def _test_to_python(self, f): |
| 112 | self.assertTrue(f.to_python(1) is True) |
| 113 | self.assertTrue(f.to_python(0) is False) |
110 | 114 | |
111 | 115 | def test_booleanfield_get_db_prep_lookup(self): |
112 | 116 | self._test_get_db_prep_lookup(models.BooleanField()) |
113 | 117 | |
114 | 118 | def test_nullbooleanfield_get_db_prep_lookup(self): |
115 | 119 | self._test_get_db_prep_lookup(models.NullBooleanField()) |
| 120 | |
| 121 | def test_booleanfield_to_python(self): |
| 122 | self._test_to_python(models.BooleanField()) |
| 123 | |
| 124 | def test_nullbooleanfield_to_python(self): |
| 125 | self._test_to_python(models.NullBooleanField()) |
116 | 126 | |
117 | 127 | def test_booleanfield_choices_blank(self): |
118 | 128 | """ |