Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[1.4.X] Fixed #18090 -- Applied filters when running prefetch_related…

… backwards through a one-to-one relation. Backport of r17888 from trunk.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 01dfe35b38b26137165f28b7821c6a6178956bc1 1 parent 8adfdf0
@aaugustin aaugustin authored
2  django/db/models/fields/
@@ -239,7 +239,7 @@ def get_query_set(self, **db_hints):
def get_prefetch_query_set(self, instances):
vals = set(instance._get_pk_val() for instance in instances)
params = {'%s__pk__in' % vals}
- return (self.get_query_set(instance=instances[0]),
+ return (self.get_query_set(instance=instances[0]).filter(**params),
lambda obj: obj._get_pk_val(),
7 tests/modeltests/prefetch_related/
@@ -1,7 +1,9 @@
from __future__ import with_statement, absolute_import
from django.contrib.contenttypes.models import ContentType
+from django.db import connection
from django.test import TestCase
+from django.test.utils import override_settings
from .models import (Author, Book, Reader, Qualification, Teacher, Department,
TaggedItem, Bookmark, AuthorAddress, FavoriteAuthors, AuthorWithAge,
@@ -356,10 +358,15 @@ def test_parent_link_prefetch(self):
with self.assertNumQueries(2):
[ for a in AuthorWithAge.objects.prefetch_related('author')]
+ @override_settings(DEBUG=True)
def test_child_link_prefetch(self):
with self.assertNumQueries(2):
l = [a.authorwithage for a in Author.objects.prefetch_related('authorwithage')]
+ # Regression for #18090: the prefetching query must include an IN clause.
+ self.assertIn('authorwithage', connection.queries[-1]['sql'])
+ self.assertIn(' IN ', connection.queries[-1]['sql'])
self.assertEqual(l, [a.authorwithage for a in Author.objects.all()])
Please sign in to comment.
Something went wrong with that request. Please try again.