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):          """  | 
