summaryrefslogtreecommitdiff
path: root/tests/defer_regress
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2022-08-18 12:30:20 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-08-30 08:43:53 +0200
commitb3db6c8dcb5145f7d45eff517bcd96460475c879 (patch)
treeca51349fab4db9de0f86dcb315c24caa02ae1e2a /tests/defer_regress
parent5d12650ed9269acb3cba97fd70e8df2e35a55a54 (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.py24
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]