1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #27159 -- Prevented pickling a query with an __in=inner_qs lookup from evaluating inner_qs.

This commit is contained in:
Jani Tiainen
2016-08-31 21:16:39 +03:00
committed by Tim Graham
parent 78ec4dfeff
commit 7a2c27112d
2 changed files with 58 additions and 0 deletions

View File

@@ -83,6 +83,25 @@ class RelatedIn(In):
else:
return super(RelatedIn, self).as_sql(compiler, connection)
def __getstate__(self):
"""
Prevent pickling a query with an __in=inner_qs lookup from evaluating
inner_qs.
"""
from django.db.models.query import QuerySet # Avoid circular import
state = self.__dict__.copy()
if isinstance(self.rhs, QuerySet):
state['rhs'] = (self.rhs.__class__, self.rhs.query)
return state
def __setstate__(self, state):
self.__dict__.update(state)
if isinstance(self.rhs, tuple):
queryset_class, query = self.rhs
queryset = queryset_class()
queryset.query = query
self.rhs = queryset
class RelatedLookupMixin(object):
def get_prep_lookup(self):