From 255cb391d16238d07ca530e3e2d41c897858231d Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Fri, 20 Mar 2009 01:37:11 +0000 Subject: [PATCH] Fixed #10547 -- Worked around some odd behaviour in Python 2.3 and 2.4. Calling the super() version of __reduce__ in Model.__reduce__ led to infinite loops in Python prior to 2.5. We don't do that any longer. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10099 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/base.py | 4 ++-- tests/regressiontests/queries/models.py | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/django/db/models/base.py b/django/db/models/base.py index 2136ed3da4..cf5903d289 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -348,9 +348,9 @@ class Model(object): need to do things manually, as they're dynamically created classes and only module-level classes can be pickled by the default path. """ - if not self._deferred: - return super(Model, self).__reduce__() data = self.__dict__ + if not self._deferred: + return (self.__class__, (), data) defers = [] pk_val = None for field in self._meta.fields: diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index 939fc0e86f..f92018a612 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -895,6 +895,9 @@ Check pickling of deferred-loading querysets >>> q2 = pickle.loads(pickle.dumps(qs)) >>> list(qs) == list(q2) True +>>> q3 = pickle.loads(pickle.dumps(qs, pickle.HIGHEST_PROTOCOL)) +>>> list(qs) == list(q3) +True Bug #7277 >>> n1.annotation_set.filter(Q(tag=t5) | Q(tag__children=t5) | Q(tag__children__children=t5))