diff options
| author | Simon Charette <charette.s@gmail.com> | 2022-08-18 12:30:20 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-08-30 08:43:53 +0200 |
| commit | b3db6c8dcb5145f7d45eff517bcd96460475c879 (patch) | |
| tree | ca51349fab4db9de0f86dcb315c24caa02ae1e2a /tests/defer_regress | |
| parent | 5d12650ed9269acb3cba97fd70e8df2e35a55a54 (diff) | |
Fixed #21204 -- Tracked field deferrals by field instead of models.
This ensures field deferral works properly when a model is involved
more than once in the same query with a distinct deferral mask.
Diffstat (limited to 'tests/defer_regress')
| -rw-r--r-- | tests/defer_regress/tests.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/tests/defer_regress/tests.py b/tests/defer_regress/tests.py index c7a61f53a3..fb9dcdb297 100644 --- a/tests/defer_regress/tests.py +++ b/tests/defer_regress/tests.py @@ -246,8 +246,6 @@ class DeferRegressionTest(TestCase): ) self.assertEqual(len(qs), 1) - -class DeferAnnotateSelectRelatedTest(TestCase): def test_defer_annotate_select_related(self): location = Location.objects.create() Request.objects.create(location=location) @@ -276,6 +274,28 @@ class DeferAnnotateSelectRelatedTest(TestCase): list, ) + def test_common_model_different_mask(self): + child = Child.objects.create(name="Child", value=42) + second_child = Child.objects.create(name="Second", value=64) + Leaf.objects.create(child=child, second_child=second_child) + with self.assertNumQueries(1): + leaf = ( + Leaf.objects.select_related("child", "second_child") + .defer("child__name", "second_child__value") + .get() + ) + self.assertEqual(leaf.child, child) + self.assertEqual(leaf.second_child, second_child) + self.assertEqual(leaf.child.get_deferred_fields(), {"name"}) + self.assertEqual(leaf.second_child.get_deferred_fields(), {"value"}) + with self.assertNumQueries(0): + self.assertEqual(leaf.child.value, 42) + self.assertEqual(leaf.second_child.name, "Second") + with self.assertNumQueries(1): + self.assertEqual(leaf.child.name, "Child") + with self.assertNumQueries(1): + self.assertEqual(leaf.second_child.value, 64) + class DeferDeletionSignalsTests(TestCase): senders = [Item, Proxy] |
