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 | 05bc5da025839537ed0ca5c4b465ccab5a7b57b3 (patch) | |
| tree | 6b76c894c6f5137f0e3cfdeb4d45afa7b5b72bcb /archaeological_warehouse/models.py | |
| parent | 33860f86e6ec71435df7116746aae843a28fa14e (diff) | |
| download | Ishtar-05bc5da025839537ed0ca5c4b465ccab5a7b57b3.tar.bz2 Ishtar-05bc5da025839537ed0ca5c4b465ccab5a7b57b3.zip  | |
Improve performance of cached_label and geo post_save
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,  | 
