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] |