adding update method to model

This commit is contained in:
Blake Eggleston
2013-10-24 14:19:41 -07:00
parent 38df187625
commit 343367dbf7
2 changed files with 32 additions and 2 deletions

View File

@@ -356,7 +356,6 @@ class BaseModel(object):
return cls.objects.get(*args, **kwargs) return cls.objects.get(*args, **kwargs)
def save(self): def save(self):
# handle polymorphic models # handle polymorphic models
if self._is_polymorphic: if self._is_polymorphic:
if self._is_polymorphic_base: if self._is_polymorphic_base:
@@ -375,6 +374,37 @@ class BaseModel(object):
return self return self
def update(self, **values):
for k, v in values.items():
col = self._columns.get(k)
# check for nonexistant columns
if col is None:
raise ValidationError("{}.{} has no column named: {}".format(self.__module__, self.__name__, k))
# check for primary key update attempts
if col.is_primary_key:
raise ValidationError("Cannot apply update to primary key '{}' for {}.{}".format(k, self.__module__, self.__name__))
setattr(self, k, v)
# handle polymorphic models
if self._is_polymorphic:
if self._is_polymorphic_base:
raise PolyMorphicModelException('cannot update polymorphic base model')
else:
setattr(self, self._polymorphic_column_name, self.__polymorphic_key__)
self.validate()
self.__dmlquery__(self.__class__, self, batch=self._batch).update()
#reset the value managers
for v in self._values.values():
v.reset_previous_value()
self._is_persisted = True
return self
def delete(self): def delete(self):
""" Deletes this instance """ """ Deletes this instance """
self.__dmlquery__(self.__class__, self, batch=self._batch).delete() self.__dmlquery__(self.__class__, self, batch=self._batch).delete()

View File

@@ -785,7 +785,7 @@ class DMLQuery(object):
def _delete_null_columns(self): def _delete_null_columns(self):
""" """
executes a delete query to remove null columns executes a delete query to remove columns that have changed to null
""" """
values, field_names, field_ids, field_values, query_values = self._get_query_values() values, field_names, field_ids, field_values, query_values = self._get_query_values()