summaryrefslogtreecommitdiff
path: root/tests/prefetch_related
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2025-06-03 22:34:39 -0400
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-06-04 10:46:49 +0200
commit08187c94ed02c45ad40a32244dedeaa7ac71ca87 (patch)
tree10ace1a29c0c4fd5724998d683ad4f1e598ad0c1 /tests/prefetch_related
parentc075508b4de8edf9db553b409f8a8ed2f26ecead (diff)
Fixed #36432 -- Fixed a prefetch_related crash on related target subclass queryset.
Regression in 626d77e52a3f247358514bcf51c761283968099c. Refs #36116. Thanks Cornelis Poppema for the excellent report.
Diffstat (limited to 'tests/prefetch_related')
-rw-r--r--tests/prefetch_related/models.py4
-rw-r--r--tests/prefetch_related/tests.py13
2 files changed, 17 insertions, 0 deletions
diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py
index e12eabdfb2..405e9bba00 100644
--- a/tests/prefetch_related/models.py
+++ b/tests/prefetch_related/models.py
@@ -280,6 +280,10 @@ class Employee(models.Model):
ordering = ["id"]
+class SelfDirectedEmployee(Employee):
+ pass
+
+
# Ticket #19607
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index 49acfdd7c8..bd37ca0ec3 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -37,6 +37,7 @@ from .models import (
Qualification,
Reader,
Room,
+ SelfDirectedEmployee,
TaggedItem,
Teacher,
WordEntry,
@@ -433,6 +434,18 @@ class PrefetchRelatedTests(TestDataMixin, TestCase):
authors[1].active_favorite_authors, [self.author3, self.author4]
)
+ def test_prefetch_queryset_child_class(self):
+ employee = SelfDirectedEmployee.objects.create(name="Foo")
+ employee.boss = employee
+ employee.save()
+ with self.assertNumQueries(2):
+ retrieved_employee = SelfDirectedEmployee.objects.prefetch_related(
+ Prefetch("boss", SelfDirectedEmployee.objects.all())
+ ).get()
+ with self.assertNumQueries(0):
+ self.assertEqual(retrieved_employee, employee)
+ self.assertEqual(retrieved_employee.boss, retrieved_employee)
+
class RawQuerySetTests(TestDataMixin, TestCase):
def test_basic(self):