diff options
Diffstat (limited to 'archaeological_context_records/models.py')
| -rw-r--r-- | archaeological_context_records/models.py | 43 | 
1 files changed, 24 insertions, 19 deletions
| diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 5ba631dba..030f817d9 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -29,7 +29,7 @@ from django.utils.translation import ugettext_lazy as _, pgettext, \      activate, pgettext_lazy, deactivate  from django.utils.text import slugify -from ishtar_common.utils import cached_label_changed +from ishtar_common.utils import cached_label_changed, HISTORY_M2M_SPLIT  from ishtar_common.models import Document, GeneralType, \      BaseHistorizedItem, HistoricalRecords, OwnPerms, ShortMenuItem, \ @@ -104,25 +104,30 @@ class Dating(models.Model):          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 val == '': -                val = None -            elif key in ("period", "dating_type", "quality"): -                field = cls._meta.get_field(key) -                q = field.related_model.objects.filter(txt_idx=val) -                if q.count(): -                    val = q.all()[0] -                else:  # do not exist anymore in db +    def history_decompress(cls, full_value, create=False): +        if not full_value: +            return [] +        full_res = [] +        for value in full_value.split(HISTORY_M2M_SPLIT): +            res = {} +            for idx, val in enumerate(value.split(cls.SEP)): +                key = cls.HISTORY_ATTR[idx] +                if val == '':                      val = None -            elif key in ("start_date", "end_date"): -                val = int(val) -            res[key] = val -        return res +                elif key in ("period", "dating_type", "quality"): +                    field = cls._meta.get_field(key) +                    q = field.related_model.objects.filter(txt_idx=val) +                    if q.count(): +                        val = q.all()[0] +                    else:  # do not exist anymore in db +                        val = None +                elif key in ("start_date", "end_date"): +                    val = int(val) +                res[key] = val +            if create: +                res = cls.objects.create(**res) +            full_res.append(res) +        return full_res      @classmethod      def is_identical(cls, dating_1, dating_2): | 
