diff options
| author | Akis Kesoglou <akis@radial.gr> | 2014-08-29 17:01:21 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-08-30 07:16:47 -0400 |
| commit | b877697472073454423a0cdff695387d9039b464 (patch) | |
| tree | 4c4cc634af45e61871876ebc49f24725cfb0f4f1 /tests | |
| parent | ce4057591adac537038736ee41d084e08eea553e (diff) | |
[1.6.x] Fixed #23370 -- defer() + select_related() crashed with inherited models.
Backport of 6613ea6e3f from master
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) |
