From dffa3e1992562ba60512d96d1eb5859ffff2ceb5 Mon Sep 17 00:00:00 2001 From: can Date: Wed, 29 May 2019 20:24:37 +0300 Subject: Fixed #30493 -- Fixed prefetch_related() for GenericRelation with different content types. Co-Authored-By: Mariusz Felisiak Thanks Simon Charette for the review. --- tests/generic_relations/tests.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests') diff --git a/tests/generic_relations/tests.py b/tests/generic_relations/tests.py index 2e99c5b5cf..7c0db95908 100644 --- a/tests/generic_relations/tests.py +++ b/tests/generic_relations/tests.py @@ -546,6 +546,24 @@ class GenericRelationsTests(TestCase): platypus.tags.remove(weird_tag) self.assertSequenceEqual(platypus.tags.all(), [furry_tag]) + def test_prefetch_related_different_content_types(self): + TaggedItem.objects.create(content_object=self.platypus, tag='prefetch_tag_1') + TaggedItem.objects.create( + content_object=Vegetable.objects.create(name='Broccoli'), + tag='prefetch_tag_2', + ) + TaggedItem.objects.create( + content_object=Animal.objects.create(common_name='Bear'), + tag='prefetch_tag_3', + ) + qs = TaggedItem.objects.filter( + tag__startswith='prefetch_tag_', + ).prefetch_related('content_object', 'content_object__tags') + with self.assertNumQueries(4): + tags = list(qs) + for tag in tags: + self.assertSequenceEqual(tag.content_object.tags.all(), [tag]) + class ProxyRelatedModelTest(TestCase): def test_default_behavior(self): -- cgit v1.3