From 8745beccb10f60864910b7941d7d0c99a5db30ed Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Tue, 22 Jul 2008 08:23:20 +0000 Subject: [PATCH] Fixed #7813 -- Allow pickling of Query classes that use select_related(). Based on a patch from Justin Bronn. The test in this patch most likely breaks on Oracle. That's another issue. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8053 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 2 ++ tests/regressiontests/queries/models.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index ce3b49cd42..2577b57a33 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -106,6 +106,8 @@ class Query(object): Pickling support. """ obj_dict = self.__dict__.copy() + obj_dict['related_select_fields'] = [] + obj_dict['related_select_cols'] = [] del obj_dict['connection'] return obj_dict diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index 51cae7cde8..3c3b840883 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -785,6 +785,15 @@ Bug #7204, #7506 -- make sure querysets with related fields can be pickled. If this doesn't crash, it's a Good Thing. >>> out = pickle.dumps(Item.objects.all()) +We should also be able to pickle things that use select_related(). The only +tricky thing here is to ensure that we do the related selections properly after +unpickling. +>>> qs = Item.objects.select_related() +>>> query = qs.query.as_sql()[0] +>>> query2 = pickle.loads(pickle.dumps(qs.query)) +>>> query2.as_sql()[0] == query +True + Bug #7277 >>> ann1 = Annotation.objects.create(name='a1', tag=t1) >>> ann1.notes.add(n1)