diff options
| -rw-r--r-- | archaeological_context_records/tests.py | 2 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 33 | ||||
| -rw-r--r-- | ishtar_common/templatetags/window_field.py | 2 | 
3 files changed, 34 insertions, 3 deletions
| diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 353716ed2..35d1c2478 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -1046,6 +1046,8 @@ class RecordRelationsTest(ContextRecordInit, TestCase):          profile = get_current_profile(force=True)          models.ContextRecordTree.check_engine()          crs = self.context_records +        for r in models.RecordRelations.objects.all(): +            r.delete()          rel_type_1 = models.RelationType.objects.create(              symmetrical=False, txt_idx="rel_1", logical_relation="included" diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index dbe5b60a7..0748a57cd 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -1223,15 +1223,42 @@ class HistoryError(Exception):  class HistoricalRecords(BaseHistoricalRecords):      def get_extra_fields(self, model, fields): +        def get_history_m2m(attr): +            def _get_history_m2m(self): +                q = model.objects.filter(pk=getattr(self, model._meta.pk.attname)) +                if q.count(): +                    return q.all()[0].history_m2m[attr] +            return _get_history_m2m + +        def get_serialize_call(attr): +            def _get_serialize_call(self): +                q = model.objects.filter(pk=getattr(self, model._meta.pk.attname)) +                if q.count(): +                    return getattr(q.all()[0], attr)() +            return _get_serialize_call + +        def get_serialize_properties(attr): +            def _get_serialize_properties(self): +                q = model.objects.filter(pk=getattr(self, model._meta.pk.attname)) +                if q.count(): +                    return getattr(q.all()[0], attr) +            return _get_serialize_properties +          extra_fields = super().get_extra_fields(model, fields)          # initialize default empty fields -        attrs = ["HISTORICAL_M2M", "SERIALIZE_CALL", "SERIALIZE_PROPERTIES"]          fields = [f.name for f in model._meta.fields]          lst = ["documents"] -        for attr in attrs: -            lst += [k for k in getattr(model, attr, []) if k not in fields]          for key in lst:              extra_fields[key] = "" +        for k in getattr(model, "SERIALIZE_PROPERTIES", []): +            if k not in fields: +                extra_fields[k] = get_serialize_properties(k) +        for k in getattr(model, "SERIALIZE_CALL", []): +            if k not in fields: +                extra_fields[k] = get_serialize_call(k) +        for k in getattr(model, "HISTORICAL_M2M", []): +            if k not in fields: +                extra_fields[k] = get_history_m2m(k)          return extra_fields      def _save_historic( diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py index 70a2ba4da..30cdab95d 100644 --- a/ishtar_common/templatetags/window_field.py +++ b/ishtar_common/templatetags/window_field.py @@ -211,6 +211,8 @@ def field_flex_detail_multiple_full(context, caption, items):  @register.filter  def m2m_listing(item, key): +    if hasattr(item, "m2m_listing_" + key): +        return getattr(item, "m2m_listing_" + key)()      if isinstance(item, dict):          if key in item:              return item[key] | 
