class DiffingMixin(object):
def __init__(self, *args, **kwargs):
super(DiffingMixin, self).__init__(*args, **kwargs)
self._original_state = dict(self.__dict__)
def save(self, *args, **kwargs):
state = dict(self.__dict__)
del state['_original_state']
self._original_state = state
super(DiffingMixin, self).save()
def is_dirty(self):
missing = object()
result = {}
for key, value in self._original_state.iteritems():
if value != self.__dict__.get(key, missing):
return True
return False
def changed_columns(self):
missing = object()
result = {}
for key, value in self._original_state.iteritems():
if value != self.__dict__.get(key, missing):
result[key] = {'old':value, 'new':self.__dict__.get(key, missing)}
return result
Comments