summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-22 08:23:20 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-22 08:23:20 +0000
commit8745beccb10f60864910b7941d7d0c99a5db30ed (patch)
treefb0dae79f8aef995590baad144e5fc92a19f3053
parent83e97ecf885676f29170ee036ca210d28dfe19fb (diff)
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
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/regressiontests/queries/models.py9
2 files changed, 11 insertions, 0 deletions
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)