diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-03-18 00:13:45 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-17 13:21:27 +0200 |
commit | 198d988f5b22fe15c5ebf00a6c1f2fd1fcfe714d (patch) | |
tree | 6b76c894c6f5137f0e3cfdeb4d45afa7b5b72bcb /archaeological_warehouse | |
parent | 5870518f64a3a3961e30163e6ada557abe64e3e0 (diff) | |
download | Ishtar-198d988f5b22fe15c5ebf00a6c1f2fd1fcfe714d.tar.bz2 Ishtar-198d988f5b22fe15c5ebf00a6c1f2fd1fcfe714d.zip |
Improve performance of cached_label and geo post_save
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/models.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 15263fd88..756052f64 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -34,7 +34,7 @@ from ishtar_common.models import Document, GeneralType, get_external_id, \ DashboardFormItem, ShortMenuItem, \ document_attached_changed, SearchAltName, DynamicRequest, GeoItem, \ QRCodeItem, SearchVectorConfig, DocumentItem -from ishtar_common.utils import cached_label_changed, post_save_geo +from ishtar_common.utils import cached_label_changed, post_save_geo, task class WarehouseType(GeneralType): @@ -250,19 +250,34 @@ class Warehouse(Address, DocumentItem, GeoItem, QRCodeItem, DashboardFormItem, def save(self, *args, **kwargs): self.update_search_vector() super(Warehouse, self).save(*args, **kwargs) - for container in self.containers.all(): - cached_label_changed(Container, instance=container) self.skip_history_when_saving = True if not self.external_id or self.auto_external_id: external_id = get_external_id('warehouse_external_id', self) if external_id != self.external_id: - updated = True self.auto_external_id = True self.external_id = external_id self._cached_label_checked = False self.save() return + if not settings.USE_BACKGROUND_TASK: + update_containers(self) + else: + update_containers.delay(self.pk) + + +@task() +def update_containers(warehouse): + if not settings.USE_BACKGROUND_TASK: + for container in warehouse.containers.all(): + cached_label_changed(Container, instance=container) + return + try: + warehouse = Warehouse.objects.get(pk=warehouse) + except Warehouse.DoesNotExist: + return + for container in warehouse.containers.all(): + cached_label_changed(Container, instance=container) m2m_changed.connect(document_attached_changed, |