summaryrefslogtreecommitdiff
path: root/django/db/models/base.py
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2009-10-29 14:32:01 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2009-10-29 14:32:01 +0000
commit96658ef2d24bd05c75aa98c5318d49f7e26549e7 (patch)
treea52666bc920042e50a6e5f07dde4d0dd2c0d3219 /django/db/models/base.py
parentc5c7791e91649a82346e720c86a7a1fa77eb4cd5 (diff)
Fixed #12057 -- Corrected regression of caching performance when a model contained a callable default. Thanks to Michael Thornhill for the excellent assistance tracking this problem.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11681 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/base.py')
-rw-r--r--django/db/models/base.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 1e081ae92e..2c05009823 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -293,7 +293,14 @@ class Model(object):
if rel_obj is None and field.null:
val = None
else:
- val = kwargs.pop(field.attname, field.get_default())
+ try:
+ val = kwargs.pop(field.attname)
+ except KeyError:
+ # This is done with an exception rather than the
+ # default argument on pop because we don't want
+ # get_default() to be evaluated, and then not used.
+ # Refs #12057.
+ val = field.get_default()
else:
val = field.get_default()
if is_related_object:
@@ -346,7 +353,7 @@ class Model(object):
"""
data = self.__dict__
if not self._deferred:
- return (self.__class__, (), data)
+ return super(Model, self).__reduce__()
defers = []
pk_val = None
for field in self._meta.fields:
@@ -359,6 +366,7 @@ class Model(object):
# once.
obj = self.__class__.__dict__[field.attname]
model = obj.model_ref()
+
return (model_unpickle, (model, defers), data)
def _get_pk_val(self, meta=None):