diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2012-10-26 00:25:59 +0100 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2012-10-26 00:25:59 +0100 |
| commit | f3a2bcdee906f7ca1434b6275fdc09b3a454cf46 (patch) | |
| tree | ffde68141a87e4982d991737e9c1644c35f7da27 /tests | |
| parent | 5c143cb340df6825714a6317901b6df03d4ef4b0 (diff) | |
Fixed #15040 - Boolean fields return 0 and 1 when loaded through select_related
Thanks to homm for the report and ramiro for the patch.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/model_fields/models.py | 5 | ||||
| -rw-r--r-- | tests/regressiontests/model_fields/tests.py | 40 |
2 files changed, 44 insertions, 1 deletions
diff --git a/tests/regressiontests/model_fields/models.py b/tests/regressiontests/model_fields/models.py index d9c123fb39..1d20f44fae 100644 --- a/tests/regressiontests/model_fields/models.py +++ b/tests/regressiontests/model_fields/models.py @@ -66,6 +66,11 @@ class BooleanModel(models.Model): bfield = models.BooleanField() string = models.CharField(max_length=10, default='abc') +class FksToBooleans(models.Model): + """Model wih FKs to models with {Null,}BooleanField's, #15040""" + bf = models.ForeignKey(BooleanModel) + nbf = models.ForeignKey(NullBooleanModel) + class RenamedField(models.Model): modelname = models.IntegerField(name="fieldname", choices=((1,'One'),)) diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py index 526aca4f98..a49894e36c 100644 --- a/tests/regressiontests/model_fields/tests.py +++ b/tests/regressiontests/model_fields/tests.py @@ -12,7 +12,8 @@ from django.utils import six from django.utils import unittest from .models import (Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post, - NullBooleanModel, BooleanModel, Document, RenamedField, VerboseNameField) + NullBooleanModel, BooleanModel, Document, RenamedField, VerboseNameField, + FksToBooleans) from .imagefield import (ImageFieldTests, ImageFieldTwoDimensionsTests, TwoImageFieldTests, ImageFieldNoDimensionsTests, @@ -218,6 +219,43 @@ class BooleanFieldTests(unittest.TestCase): select={'string_col': 'string'})[0] self.assertFalse(isinstance(b5.pk, bool)) + def test_select_related(self): + """ + Test type of boolean fields when retrieved via select_related() (MySQL, + #15040) + """ + bmt = BooleanModel.objects.create(bfield=True) + bmf = BooleanModel.objects.create(bfield=False) + nbmt = NullBooleanModel.objects.create(nbfield=True) + nbmf = NullBooleanModel.objects.create(nbfield=False) + + m1 = FksToBooleans.objects.create(bf=bmt, nbf=nbmt) + m2 = FksToBooleans.objects.create(bf=bmf, nbf=nbmf) + + # Test select_related('fk_field_name') + ma = FksToBooleans.objects.select_related('bf').get(pk=m1.id) + # verify types -- should't be 0/1 + self.assertIsInstance(ma.bf.bfield, bool) + self.assertIsInstance(ma.nbf.nbfield, bool) + # verify values + self.assertEqual(ma.bf.bfield, True) + self.assertEqual(ma.nbf.nbfield, True) + + # Test select_related() + mb = FksToBooleans.objects.select_related().get(pk=m1.id) + mc = FksToBooleans.objects.select_related().get(pk=m2.id) + # verify types -- shouldn't be 0/1 + self.assertIsInstance(mb.bf.bfield, bool) + self.assertIsInstance(mb.nbf.nbfield, bool) + self.assertIsInstance(mc.bf.bfield, bool) + self.assertIsInstance(mc.nbf.nbfield, bool) + # verify values + self.assertEqual(mb.bf.bfield, True) + self.assertEqual(mb.nbf.nbfield, True) + self.assertEqual(mc.bf.bfield, False) + self.assertEqual(mc.nbf.nbfield, False) + + class ChoicesTests(test.TestCase): def test_choices_and_field_display(self): """ |
