From 296ee1376450adf58a040a9da816a100fa5d2ec9 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 12 Sep 2024 12:39:40 +0200 Subject: ⚡️ improve performance - external ID: prevent double save - user UPDATE query instead of save - remove dead code "BulkUpdatedItem" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/models_common.py | 54 +++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 16 deletions(-) (limited to 'ishtar_common/models_common.py') diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 0b34400a1..98dbb047b 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -1615,20 +1615,39 @@ class BaseHistorizedItem( def duplicate(self, user=None, data=None): return duplicate_item(self, user, data) - def update_external_id(self, save=False): - if not self.EXTERNAL_ID_KEY or ( - self.external_id and not getattr(self, "auto_external_id", False) - ): + def update_external_id(self, save=False, no_set=False): + if not hasattr(self, "external_id"): + return + if self.external_id and not getattr(self, "auto_external_id", False): return - external_id = get_generated_id(self.EXTERNAL_ID_KEY, self) + external_id_key = self.EXTERNAL_ID_KEY or ( + hasattr(self, "SLUG") and (self.SLUG + "_external_id") + ) + if not external_id_key: + return + external_id = get_generated_id(external_id_key, self) if external_id == self.external_id: return - self.auto_external_id = True - self.external_id = external_id + if no_set: + return external_id + try: + self.auto_external_id = True + except AttributeError: + pass + try: + self.external_id = external_id + except AttributeError: + return self._cached_label_checked = False if save: - self.skip_history_when_saving = True - self.save() + if self.pk: + self.__class__.objects.filter(pk=self.pk).update( + auto_external_id=True, + external_id=external_id + ) + else: + self.skip_history_when_saving = True + self.save() return external_id def get_last_history_date(self): @@ -4524,22 +4543,25 @@ class CompleteIdentifierItem(models.Model, ImageContainerModel): def regenerate_all_ids(self, save=True): if getattr(self, "_prevent_loop", False): - return - modified = False + return {} + updated = {} custom_index = self.generate_custom_index() if custom_index != self.custom_index: - modified = True self.custom_index = custom_index + updated["custom_index"] = custom_index complete_id = self.generate_complete_identifier() if complete_id and complete_id != self.complete_identifier: - modified = True self.complete_identifier = complete_id - if modified: + updated["complete_identifier"] = complete_id + if updated: self._prevent_loop = True self.skip_history_when_saving = True if save: - self.save() - return modified + if self.pk: + self.__class__.objects.filter(pk=self.pk).update(**updated) + else: + self.save() + return updated class SearchVectorConfig: -- cgit v1.2.3