summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-12 12:39:40 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-09-13 13:34:27 +0200
commit296ee1376450adf58a040a9da816a100fa5d2ec9 (patch)
treebf7d12d69c5c3b8670f28a58e524200db008e8a0 /ishtar_common/models_common.py
parentc8a27a7f986adb1e3d0eb911acffa02d030cc85f (diff)
downloadIshtar-296ee1376450adf58a040a9da816a100fa5d2ec9.tar.bz2
Ishtar-296ee1376450adf58a040a9da816a100fa5d2ec9.zip
⚡️ improve performance - external ID: prevent double save - user UPDATE query instead of save - remove dead code "BulkUpdatedItem"
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py54
1 files changed, 38 insertions, 16 deletions
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: