diff options
| 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 | 
| commit | 06b13fe771fd67ab655f0c81bbae51add767deb2 (patch) | |
| tree | 69541c08d1623a131b67f6072d47fc736a8845d8 /ishtar_common | |
| parent | c7259304ea80cb5ca2ed0d4e4ca909f8b54ee176 (diff) | |
| download | Ishtar-06b13fe771fd67ab655f0c81bbae51add767deb2.tar.bz2 Ishtar-06b13fe771fd67ab655f0c81bbae51add767deb2.zip | |
Fix m2m listing on historic
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models_common.py | 33 | ||||
| -rw-r--r-- | ishtar_common/templatetags/window_field.py | 2 | 
2 files changed, 32 insertions, 3 deletions
| 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] | 
