From 4a4d3e213316ea39a0f8d596c9c0d3dfba8ce495 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 11 Apr 2009 15:25:15 +0000 Subject: [PATCH] Fixed #10796 -- Corrected a pickling problem introduced by [10522]. Thanks to carljm for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10526 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index df4de2a750..f4bf8b2b07 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -124,8 +124,13 @@ class BaseQuery(object): obj_dict['related_select_cols'] = [] del obj_dict['connection'] - # Fields can't be pickled, so we pickle the list of field names instead. - obj_dict['select_fields'] = [f.name for f in obj_dict['select_fields']] + # Fields can't be pickled, so if a field list has been + # specified, we pickle the list of field names instead. + # None is also a possible value; that can pass as-is + obj_dict['select_fields'] = [ + f is not None and f.name or None + for f in obj_dict['select_fields'] + ] return obj_dict def __setstate__(self, obj_dict): @@ -133,7 +138,10 @@ class BaseQuery(object): Unpickling support. """ # Rebuild list of field instances - obj_dict['select_fields'] = [obj_dict['model']._meta.get_field(name) for name in obj_dict['select_fields']] + obj_dict['select_fields'] = [ + name is not None and obj_dict['model']._meta.get_field(name) or None + for name in obj_dict['select_fields'] + ] self.__dict__.update(obj_dict) # XXX: Need a better solution for this when multi-db stuff is