diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-10-29 14:32:01 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-10-29 14:32:01 +0000 |
| commit | 96658ef2d24bd05c75aa98c5318d49f7e26549e7 (patch) | |
| tree | a52666bc920042e50a6e5f07dde4d0dd2c0d3219 /django/db/models/base.py | |
| parent | c5c7791e91649a82346e720c86a7a1fa77eb4cd5 (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.py | 12 |
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): |
