diff options
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 |
commit | 35f9cbb4d247efe038bbc3507bd8c8c056735ca8 (patch) | |
tree | e5d0f38c898f24c420702682ded8d12ada2dbc3e /archaeological_context_records/models.py | |
parent | be8538ec1cf68dc5dcffa927558181b2e7e6225e (diff) | |
download | Ishtar-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.py | 35 |
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): """ |