Fixed #27499 -- Made Prefetches pickle without evaluating their QuerySet.

This commit is contained in:
Adam Chainz 2016-11-16 14:49:20 +00:00 committed by Tim Graham
parent 7dd315a46f
commit e044026dce
2 changed files with 19 additions and 0 deletions

View file

@ -1289,6 +1289,16 @@ class Prefetch(object):
self.queryset = queryset
self.to_attr = to_attr
def __getstate__(self):
obj_dict = self.__dict__.copy()
if self.queryset is not None:
# Prevent the QuerySet from being evaluated
obj_dict['queryset'] = self.queryset._clone(
_result_cache=[],
_prefetch_done=True,
)
return obj_dict
def add_prefix(self, prefix):
self.prefetch_through = LOOKUP_SEP.join([prefix, self.prefetch_through])
self.prefetch_to = LOOKUP_SEP.join([prefix, self.prefetch_to])