summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-07-05 16:48:00 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2023-07-05 16:48:00 +0200
commitddc9671c40a86b1652d03f5a3e3e367ebd18d53d (patch)
tree4ee481755b0afdc319ffd14c1c3f59d715b70799
parente1a3ed976f83c00f558f46029fb3e1e817b69d1e (diff)
downloadIshtar-ddc9671c40a86b1652d03f5a3e3e367ebd18d53d.tar.bz2
Ishtar-ddc9671c40a86b1652d03f5a3e3e367ebd18d53d.zip
🐛 fix recursive save for cached label post_save
-rw-r--r--ishtar_common/models_common.py4
-rw-r--r--ishtar_common/utils.py7
2 files changed, 7 insertions, 4 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 5c9549ba3..1c2170018 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -3334,7 +3334,7 @@ class MainItem(ShortMenuItem, SerializeItem):
self.skip_history_when_saving = True
self._cached_label_checked = True
self._post_saved_geo = True
- self._external_id_changed = False
+ self._external_id_checked = True
self._search_updated = True
self._no_move = True
@@ -3431,7 +3431,7 @@ class MainItem(ShortMenuItem, SerializeItem):
def external_id_changed(self):
self.no_post_process()
- self._external_id_changed = False
+ self._external_id_checked = False
external_id_changed(self.__class__, instance=self, created=False)
def can_do(self, request, action_name):
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 673821c14..2becd20ce 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -635,10 +635,12 @@ def external_id_changed(sender, **kwargs):
def _external_id_changed(sender, **kwargs):
sender, instance = deserialize_args_for_tasks(sender, kwargs, EXTRA_KWARGS_TRIGGER)
if not instance or not hasattr(instance, "external_id") \
- or not hasattr(instance, "auto_external_id"):
+ or not hasattr(instance, "auto_external_id") \
+ or not hasattr(instance, "SLUG"):
+ return
+ if getattr(instance, "_external_id_checked", None):
return
updated = False
- instance.no_post_process()
if not instance.external_id or instance.auto_external_id:
external_id = get_generated_id(instance.SLUG + "_external_id", instance)
if external_id != instance.external_id:
@@ -647,6 +649,7 @@ def _external_id_changed(sender, **kwargs):
instance.external_id = external_id
if hasattr(instance, "regenerate_all_ids"):
updated |= instance.regenerate_all_ids(save=False) or False
+ instance._external_id_checked = True
if updated:
instance.save()