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/docs/ref/databases.txt b/docs/ref/databases.txt
index afead83..3aef61c 100644
a
|
b
|
storage engine, you have a couple of options.
|
323 | 323 | Notes on specific fields |
324 | 324 | ------------------------ |
325 | 325 | |
326 | | Boolean fields |
327 | | ~~~~~~~~~~~~~~ |
328 | | |
329 | | Since MySQL doesn't have a direct ``BOOLEAN`` column type, Django uses a |
330 | | ``TINYINT`` column with values of ``1`` and ``0`` to store values for the |
331 | | :class:`~django.db.models.BooleanField` model field. Refer to the documentation |
332 | | of that field for more details, but usually this won't be something that will |
333 | | matter unless you're printing out the field values and are expecting to see |
334 | | ``True`` and ``False.``. |
335 | | |
336 | 326 | Character fields |
337 | 327 | ~~~~~~~~~~~~~~~~ |
338 | 328 | |
diff --git a/docs/releases/1.2.txt b/docs/releases/1.2.txt
index b952ec1..703ded3 100644
a
|
b
|
created using ``decorator_from_middleware``.
|
302 | 302 | |
303 | 303 | .. _deprecated-features-1.2: |
304 | 304 | |
| 305 | ``BooleanField`` on MySQL |
| 306 | -------------------------- |
| 307 | |
| 308 | In previous versions of Django ``BoleanFields`` under MySQL would return their |
| 309 | values as either ``1`` or ``0``, instead of ``True`` or ``False``. For most |
| 310 | people this shouldn't have been a problem because ``bool`` is a subclass of |
| 311 | ``int``, however in Django 1.2 MySQL correctly returns a real ``bool``. The |
| 312 | only time this should ever be an issue is if you were expecting printing the |
| 313 | ``repr`` of a ``BooleanField`` to print ``1`` or ``0``. |
| 314 | |
305 | 315 | Features deprecated in 1.2 |
306 | 316 | ========================== |
307 | 317 | |
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 | """ |