From 6ebf8f9057893b802fa85599573886081f32edc9 Mon Sep 17 00:00:00 2001 From: Adam Chainz Date: Fri, 23 Dec 2016 14:58:22 +0000 Subject: [PATCH] Refs #27624 -- Made QuerySet._prefetch_related_lookups immutable. --- django/db/models/query.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/django/db/models/query.py b/django/db/models/query.py index f96a5f13ff..6a0b1ca0ac 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -165,9 +165,9 @@ class QuerySet(object): self._result_cache = None self._sticky_filter = False self._for_write = False - self._prefetch_related_lookups = [] + self._prefetch_related_lookups = () self._prefetch_done = False - self._known_related_objects = {} # {rel_field, {pk: rel_obj}} + self._known_related_objects = {} # {rel_field: {pk: rel_obj}} self._iterable_class = ModelIterable self._fields = None @@ -863,9 +863,9 @@ class QuerySet(object): """ clone = self._clone() if lookups == (None,): - clone._prefetch_related_lookups = [] + clone._prefetch_related_lookups = () else: - clone._prefetch_related_lookups.extend(lookups) + clone._prefetch_related_lookups = clone._prefetch_related_lookups + lookups return clone def annotate(self, *args, **kwargs): @@ -1061,7 +1061,7 @@ class QuerySet(object): query.filter_is_sticky = True clone = self.__class__(model=self.model, query=query, using=self._db, hints=self._hints) clone._for_write = self._for_write - clone._prefetch_related_lookups = self._prefetch_related_lookups[:] + clone._prefetch_related_lookups = self._prefetch_related_lookups clone._known_related_objects = self._known_related_objects clone._iterable_class = self._iterable_class clone._fields = self._fields @@ -1543,13 +1543,13 @@ def prefetch_one_level(instances, prefetcher, lookup, level): # later (happens in nested prefetch_related). additional_lookups = [ copy.copy(additional_lookup) for additional_lookup - in getattr(rel_qs, '_prefetch_related_lookups', []) + in getattr(rel_qs, '_prefetch_related_lookups', ()) ] if additional_lookups: # Don't need to clone because the manager should have given us a fresh # instance, so we access an internal instead of using public interface # for performance reasons. - rel_qs._prefetch_related_lookups = [] + rel_qs._prefetch_related_lookups = () all_related_objects = list(rel_qs)