summaryrefslogtreecommitdiff
path: root/django/db/models
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2007-07-12 07:45:35 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2007-07-12 07:45:35 +0000
commit2d6d20def70dacf4ea783e5a0c8a72266e603bb7 (patch)
treefa08081ed0e00e33af408f9e9570b48b1e202a19 /django/db/models
parent090aa5210ebd5ce3c79db95d3f04c95ed346f42a (diff)
Fixed #4459 -- Added 'raw' argument to save method, to override any pre-save processing, and modified serializers to use a raw-save. This enables serialization of DateFields with auto_now/auto_now_add. Also modified serializers to invoke save() directly on the model baseclass, to avoid any (potentially order-dependent, data modifying) behavior in a custom save() method.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5658 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models')
-rw-r--r--django/db/models/base.py8
1 files changed, 4 insertions, 4 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index d430d03a31..eb8a9b63be 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -201,7 +201,7 @@ class Model(object):
_prepare = classmethod(_prepare)
- def save(self):
+ def save(self, raw=False):
dispatcher.send(signal=signals.pre_save, sender=self.__class__, instance=self)
non_pks = [f for f in self._meta.fields if not f.primary_key]
@@ -218,7 +218,7 @@ class Model(object):
self._meta.pk.get_db_prep_lookup('exact', pk_val))
# If it does already exist, do an UPDATE.
if cursor.fetchone()[0] > 0:
- db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks]
+ db_values = [f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, False)) for f in non_pks]
if db_values:
cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
(backend.quote_name(self._meta.db_table),
@@ -229,11 +229,11 @@ class Model(object):
record_exists = False
if not pk_set or not record_exists:
field_names = [backend.quote_name(f.column) for f in self._meta.fields if not isinstance(f, AutoField)]
- db_values = [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if not isinstance(f, AutoField)]
+ db_values = [f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True)) for f in self._meta.fields if not isinstance(f, AutoField)]
# If the PK has been manually set, respect that.
if pk_set:
field_names += [f.column for f in self._meta.fields if isinstance(f, AutoField)]
- db_values += [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if isinstance(f, AutoField)]
+ db_values += [f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True)) for f in self._meta.fields if isinstance(f, AutoField)]
placeholders = ['%s'] * len(field_names)
if self._meta.order_with_respect_to:
field_names.append(backend.quote_name('_order'))