From 3340d4144605bd150906d070ae3e910941fa83c9 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Tue, 3 Jun 2025 22:34:39 -0400 Subject: [5.2.x] Fixed #36432 -- Fixed a prefetch_related crash on related target subclass queryset. Regression in 626d77e52a3f247358514bcf51c761283968099c. Refs #36116. Thanks Cornelis Poppema for the excellent report. Backport of 08187c94ed02c45ad40a32244dedeaa7ac71ca87 from main. --- tests/prefetch_related/models.py | 4 ++++ tests/prefetch_related/tests.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) (limited to 'tests') diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py index 2f37cde1c8..888485e169 100644 --- a/tests/prefetch_related/models.py +++ b/tests/prefetch_related/models.py @@ -271,6 +271,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 b3531cc36f..3c0b5f4505 100644 --- a/tests/prefetch_related/tests.py +++ b/tests/prefetch_related/tests.py @@ -39,6 +39,7 @@ from .models import ( Qualification, Reader, Room, + SelfDirectedEmployee, TaggedItem, Teacher, WordEntry, @@ -435,6 +436,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): -- cgit v1.3