diff options
Diffstat (limited to 'archaeological_warehouse/models.py')
-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, |