diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_inheritance/tests.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/model_inheritance/tests.py b/tests/model_inheritance/tests.py index dc40d2d2e0..f96fe5e4dd 100644 --- a/tests/model_inheritance/tests.py +++ b/tests/model_inheritance/tests.py @@ -275,6 +275,43 @@ class ModelInheritanceTests(TestCase): lambda: ItalianRestaurant.objects.select_related("chef")[0].chef ) + def test_select_related_defer(self): + """ + #23370 - Should be able to defer child fields when using + select_related() from parent to child. + """ + Restaurant.objects.create( + name="Demon Dogs", + address="944 W. Fullerton", + serves_hot_dogs=True, + serves_pizza=False, + rating=2, + ) + ItalianRestaurant.objects.create( + name="Ristorante Miron", + address="1234 W. Ash", + serves_hot_dogs=False, + serves_pizza=False, + serves_gnocchi=True, + rating=4, + ) + + qs = (Restaurant.objects + .select_related("italianrestaurant") + .defer("italianrestaurant__serves_gnocchi") + .order_by("rating")) + + # Test that the field was actually defered + with self.assertNumQueries(2): + objs = list(qs.all()) + self.assertTrue(objs[1].italianrestaurant.serves_gnocchi) + + # Test that model fields where assigned correct values + self.assertEqual(qs[0].name, 'Demon Dogs') + self.assertEqual(qs[0].rating, 2) + self.assertEqual(qs[1].italianrestaurant.name, 'Ristorante Miron') + self.assertEqual(qs[1].italianrestaurant.rating, 4) + def test_mixin_init(self): m = MixinModel() self.assertEqual(m.other_attr, 1) |
