summaryrefslogtreecommitdiff
path: root/archaeological_context_records/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-01-02 10:18:44 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-01-11 17:30:46 +0100
commit35f9cbb4d247efe038bbc3507bd8c8c056735ca8 (patch)
treee5d0f38c898f24c420702682ded8d12ada2dbc3e /archaeological_context_records/models.py
parentbe8538ec1cf68dc5dcffa927558181b2e7e6225e (diff)
downloadIshtar-35f9cbb4d247efe038bbc3507bd8c8c056735ca8.tar.bz2
Ishtar-35f9cbb4d247efe038bbc3507bd8c8c056735ca8.zip
Work on M2M historization
Diffstat (limited to 'archaeological_context_records/models.py')
-rw-r--r--archaeological_context_records/models.py35
1 files changed, 33 insertions, 2 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 82527acb1..cce36236c 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -17,12 +17,12 @@
# See the file COPYING for details.
-import time
+import datetime
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
-from django.db import connection, transaction
+from django.db import connection
from django.db.models import Q
from django.db.models.signals import post_delete, post_save, m2m_changed
from django.utils.translation import ugettext_lazy as _, pgettext, \
@@ -84,6 +84,37 @@ class Dating(models.Model):
return unicode(self.period)
return u"%s (%s-%s)" % (self.period, start_date, end_date)
+ SEP = u"$|£|$"
+ HISTORY_ATTR = ["period", "start_date", "end_date", "dating_type",
+ "quality", "precise_dating"]
+
+ def history_compress(self):
+ values = []
+ for attr in self.HISTORY_ATTR:
+ val = getattr(self, attr)
+ if hasattr(val, 'history_compress'):
+ values.append(val.history_compress())
+ elif hasattr(val, 'isoformat'):
+ values.append(val.isoformat())
+ else:
+ values.append(unicode(val))
+ return self.SEP.join(values)
+
+ @classmethod
+ def history_decompress(cls, value):
+ if not value:
+ value = ""
+ res = {}
+ for idx, val in enumerate(value.split(cls.SEP)):
+ key = cls.HISTORY_ATTR[idx]
+ if key in ("period", "dating_type", "quality"):
+ field = cls._meta.get_field(key)
+ val = field.to.model.objects.get(txt_idx=val)
+ elif key in ("start_date", "end_date"):
+ val = datetime.datetime.fromisoformat(val)
+ res[key] = val
+ return res
+
@classmethod
def is_identical(cls, dating_1, dating_2):
"""