diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-10 12:28:42 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-04-10 12:28:42 +0200 |
commit | d0e31acb2cfb5c7300d3f8b833219b756577d73b (patch) | |
tree | 47d90976b77a7e937837e6cd90c701959e259645 /ishtar/furnitures/models.py | |
parent | d9425a6b4ee791ad6f35457209800edfd4311da8 (diff) | |
download | Ishtar-d0e31acb2cfb5c7300d3f8b833219b756577d73b.tar.bz2 Ishtar-d0e31acb2cfb5c7300d3f8b833219b756577d73b.zip |
Better history management: don't save identical version of the history (refs #349)
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r-- | ishtar/furnitures/models.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index de519076f..9d1873770 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -33,10 +33,27 @@ from django.contrib.auth.models import User from django.contrib.gis.db import models from django.contrib import admin -from simple_history.models import HistoricalRecords +from simple_history.models import HistoricalRecords as BaseHistoricalRecords from ishtar import settings +# HistoricalRecords enhancement: don't save identical versions +class HistoricalRecords(BaseHistoricalRecords): + def create_historical_record(self, instance, type): + manager = getattr(instance, self.manager_name) + attrs = {} + for field in instance._meta.fields: + attrs[field.attname] = getattr(instance, field.attname) + history = instance.history.all() + if not history: + manager.create(history_type=type, **attrs) + return + old_instance = history[0] + for field in instance._meta.fields: + if getattr(old_instance, field.attname) != attrs[field.attname]: + manager.create(history_type=type, **attrs) + return + # valid ID validator for models def valid_id(cls): def func(value): @@ -200,6 +217,7 @@ class BaseHistorizedItem(models.Model): item._next = historized[step - 1].history_date else: item._next = None + item.history_date = historized[step].history_date model = self.__class__ for k in model._meta.get_all_field_names(): field = model._meta.get_field_by_name(k)[0] @@ -219,6 +237,7 @@ class BaseHistorizedItem(models.Model): raise HistoryError(u"The class %s has no pk %d" % ( unicode(field.rel.to), val)) setattr(item, k, None) + item.pk = self.pk return item def rollback(self, date): |