diff options
| 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 | 
| commit | ddc9671c40a86b1652d03f5a3e3e367ebd18d53d (patch) | |
| tree | 4ee481755b0afdc319ffd14c1c3f59d715b70799 | |
| parent | e1a3ed976f83c00f558f46029fb3e1e817b69d1e (diff) | |
| download | Ishtar-ddc9671c40a86b1652d03f5a3e3e367ebd18d53d.tar.bz2 Ishtar-ddc9671c40a86b1652d03f5a3e3e367ebd18d53d.zip  | |
🐛 fix recursive save for cached label post_save
| -rw-r--r-- | ishtar_common/models_common.py | 4 | ||||
| -rw-r--r-- | ishtar_common/utils.py | 7 | 
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()  | 
