summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/models.py
diff options
context:
space:
mode:
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
commitd0e31acb2cfb5c7300d3f8b833219b756577d73b (patch)
tree47d90976b77a7e937837e6cd90c701959e259645 /ishtar/furnitures/models.py
parentd9425a6b4ee791ad6f35457209800edfd4311da8 (diff)
downloadIshtar-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.py21
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):