summaryrefslogtreecommitdiff
path: root/tests/foreign_object
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2025-04-14 15:12:28 +0100
committerJacob Walls <jacobtylerwalls@gmail.com>2025-10-16 14:52:22 -0400
commit6dc9b04018032dccbb5ad8347f7ddf4341316166 (patch)
treeda87f218b3992788d5804c552edffd270c030b7a /tests/foreign_object
parent821619aa8771ef211c4c4922001efdf914201ca3 (diff)
Refs #28586 -- Copied fetch modes to related objects.
This change ensures that behavior and performance remain consistent when traversing relationships.
Diffstat (limited to 'tests/foreign_object')
-rw-r--r--tests/foreign_object/tests.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/foreign_object/tests.py b/tests/foreign_object/tests.py
index 09fb47e771..233c596885 100644
--- a/tests/foreign_object/tests.py
+++ b/tests/foreign_object/tests.py
@@ -5,6 +5,7 @@ from operator import attrgetter
from django.core.exceptions import FieldError, ValidationError
from django.db import connection, models
+from django.db.models import FETCH_PEERS
from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
from django.test.utils import CaptureQueriesContext, isolate_apps
from django.utils import translation
@@ -603,6 +604,42 @@ class MultiColumnFKTests(TestCase):
[m4],
)
+ def test_fetch_mode_copied_forward_fetching_one(self):
+ person = Person.objects.fetch_mode(FETCH_PEERS).get(pk=self.bob.pk)
+ self.assertEqual(person._state.fetch_mode, FETCH_PEERS)
+ self.assertEqual(
+ person.person_country._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
+ def test_fetch_mode_copied_forward_fetching_many(self):
+ people = list(Person.objects.fetch_mode(FETCH_PEERS))
+ person = people[0]
+ self.assertEqual(person._state.fetch_mode, FETCH_PEERS)
+ self.assertEqual(
+ person.person_country._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
+ def test_fetch_mode_copied_reverse_fetching_one(self):
+ country = Country.objects.fetch_mode(FETCH_PEERS).get(pk=self.usa.pk)
+ self.assertEqual(country._state.fetch_mode, FETCH_PEERS)
+ person = country.person_set.get(pk=self.bob.pk)
+ self.assertEqual(
+ person._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
+ def test_fetch_mode_copied_reverse_fetching_many(self):
+ countries = list(Country.objects.fetch_mode(FETCH_PEERS))
+ country = countries[0]
+ self.assertEqual(country._state.fetch_mode, FETCH_PEERS)
+ person = country.person_set.earliest("pk")
+ self.assertEqual(
+ person._state.fetch_mode,
+ FETCH_PEERS,
+ )
+
class TestModelCheckTests(SimpleTestCase):
@isolate_apps("foreign_object")