summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/defer_regress/models.py6
-rw-r--r--tests/defer_regress/tests.py21
2 files changed, 27 insertions, 0 deletions
diff --git a/tests/defer_regress/models.py b/tests/defer_regress/models.py
index dd492993b7..38ba4a622f 100644
--- a/tests/defer_regress/models.py
+++ b/tests/defer_regress/models.py
@@ -10,6 +10,12 @@ class Item(models.Model):
text = models.TextField(default="xyzzy")
value = models.IntegerField()
other_value = models.IntegerField(default=0)
+ source = models.OneToOneField(
+ "self",
+ related_name="destination",
+ on_delete=models.CASCADE,
+ null=True,
+ )
class RelatedItem(models.Model):
diff --git a/tests/defer_regress/tests.py b/tests/defer_regress/tests.py
index 10100e348d..1209325f21 100644
--- a/tests/defer_regress/tests.py
+++ b/tests/defer_regress/tests.py
@@ -309,6 +309,27 @@ class DeferRegressionTest(TestCase):
with self.assertNumQueries(1):
self.assertEqual(Item.objects.only("request").get(), item)
+ def test_self_referential_one_to_one(self):
+ first = Item.objects.create(name="first", value=1)
+ second = Item.objects.create(name="second", value=2, source=first)
+ with self.assertNumQueries(1):
+ deferred_first, deferred_second = (
+ Item.objects.select_related("source", "destination")
+ .only("name", "source__name", "destination__value")
+ .order_by("pk")
+ )
+ with self.assertNumQueries(0):
+ self.assertEqual(deferred_first.name, first.name)
+ self.assertEqual(deferred_second.name, second.name)
+ self.assertEqual(deferred_second.source.name, first.name)
+ self.assertEqual(deferred_first.destination.value, second.value)
+ with self.assertNumQueries(1):
+ self.assertEqual(deferred_first.value, first.value)
+ with self.assertNumQueries(1):
+ self.assertEqual(deferred_second.source.value, first.value)
+ with self.assertNumQueries(1):
+ self.assertEqual(deferred_first.destination.name, second.name)
+
class DeferDeletionSignalsTests(TestCase):
senders = [Item, Proxy]