From 1252b77824639fba398cf70586bdd75c42f86fdf Mon Sep 17 00:00:00 2001 From: valtron Date: Fri, 11 Apr 2014 19:27:34 -0600 Subject: [1.6.x] Fixed #21760 -- prefetch_related used an inefficient query for reverse FK. Regression introduced by commit 9777442. Refs #21410. Conflicts: tests/prefetch_related/tests.py Backport of d3b71b976d from master --- tests/prefetch_related/tests.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tests') diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py index 384457aba4..90a27f818c 100644 --- a/tests/prefetch_related/tests.py +++ b/tests/prefetch_related/tests.py @@ -2,9 +2,11 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType from django.db import connection +from django.db.models.query import get_prefetcher from django.test import TestCase from django.test.utils import override_settings from django.utils import six +from django.utils.encoding import force_text from .models import (Author, Book, Reader, Qualification, Teacher, Department, TaggedItem, Bookmark, AuthorAddress, FavoriteAuthors, AuthorWithAge, @@ -677,3 +679,18 @@ class Ticket21410Tests(TestCase): def test_bug(self): list(Author2.objects.prefetch_related('first_book', 'favorite_books')) + + +class Ticket21760Tests(TestCase): + + def setUp(self): + self.rooms = [] + for _ in range(3): + house = House.objects.create() + for _ in range(3): + self.rooms.append(Room.objects.create(house = house)) + + def test_bug(self): + prefetcher = get_prefetcher(self.rooms[0], 'house')[0] + queryset = prefetcher.get_prefetch_queryset(list(Room.objects.all()))[0] + self.assertNotIn(' JOIN ', force_text(queryset.query)) -- cgit v1.3