summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorFrançois Freitag <francois.freitag@polyconseil.fr>2016-01-10 17:54:57 +0100
committerTim Graham <timograham@gmail.com>2016-01-26 07:20:13 -0500
commitbdbe50a491ca41e7d4ebace47bfe8abe50a58211 (patch)
tree38f5b7953979f727267a5886488ecdfc7a5245ca /django
parent13023ba86746980aace2341ba32a9419e7567751 (diff)
Fixed #25546 -- Prevented duplicate queries with nested prefetch_related().
Diffstat (limited to 'django')
-rw-r--r--django/db/models/query.py2
1 files changed, 2 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index b1bebcaca0..5e2e5d7917 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1521,6 +1521,7 @@ def get_prefetcher(instance, attr):
rel_obj = getattr(instance, attr)
if hasattr(rel_obj, 'get_prefetch_queryset'):
prefetcher = rel_obj
+ is_fetched = attr in instance._prefetched_objects_cache
return prefetcher, rel_obj_descriptor, attr_found, is_fetched
@@ -1597,6 +1598,7 @@ def prefetch_one_level(instances, prefetcher, lookup, level):
else:
if as_attr:
setattr(obj, to_attr, vals)
+ obj._prefetched_objects_cache[cache_name] = vals
else:
# Cache in the QuerySet.all().
qs = getattr(obj, to_attr).all()