summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-01-19 15:49:24 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:20:59 +0100
commit06b13fe771fd67ab655f0c81bbae51add767deb2 (patch)
tree69541c08d1623a131b67f6072d47fc736a8845d8
parentc7259304ea80cb5ca2ed0d4e4ca909f8b54ee176 (diff)
downloadIshtar-06b13fe771fd67ab655f0c81bbae51add767deb2.tar.bz2
Ishtar-06b13fe771fd67ab655f0c81bbae51add767deb2.zip
Fix m2m listing on historic
-rw-r--r--archaeological_context_records/tests.py2
-rw-r--r--ishtar_common/models_common.py33
-rw-r--r--ishtar_common/templatetags/window_field.py2
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]