From 05bc5da025839537ed0ca5c4b465ccab5a7b57b3 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 18 Mar 2019 00:13:45 +0100 Subject: Improve performance of cached_label and geo post_save --- archaeological_warehouse/models.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'archaeological_warehouse/models.py') 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, -- cgit v1.2.3