diff --git a/django_elasticsearch_dsl/signals.py b/django_elasticsearch_dsl/signals.py index 48f4224..1685302 100644 --- a/django_elasticsearch_dsl/signals.py +++ b/django_elasticsearch_dsl/signals.py @@ -127,8 +127,8 @@ def handle_save(self, sender, instance, **kwargs): app_label = instance._meta.app_label model_name = instance.__class__.__name__ - self.registry_update_task.delay(pk, app_label, model_name) - self.registry_update_related_task.delay(pk, app_label, model_name) + self.registry_update_task.delay_on_commit(pk, app_label, model_name) + self.registry_update_related_task.delay_on_commit(pk, app_label, model_name) def handle_pre_delete(self, sender, instance, **kwargs): """Handle removing of instance object from related models instance. @@ -163,14 +163,14 @@ def prepare_registry_delete_related_task(self, instance): else: object_list = related bulk_data = list(doc_instance._get_actions(object_list, action)), - self.registry_delete_task.delay(doc_instance.__class__.__name__, bulk_data) + self.registry_delete_task.delay_on_commit(doc_instance.__class__.__name__, bulk_data) @shared_task() def registry_delete_task(doc_label, data): """ Handle the bulk delete data on the registry as a Celery task. - The different implementations used are due to the difference between delete and update operations. - The update operation can re-read the updated data from the database to ensure eventual consistency, + The different implementations used are due to the difference between delete and update operations. + The update operation can re-read the updated data from the database to ensure eventual consistency, but the delete needs to be processed before the database record is deleted to obtain the associated data. """ doc_instance = import_module(doc_label) @@ -195,7 +195,7 @@ def prepare_registry_delete_task(self, instance): else: object_list = related bulk_data = list(doc_instance.get_actions(object_list, action)), - self.registry_delete_task.delay(doc_instance.__class__.__name__, bulk_data) + self.registry_delete_task.delay_on_commit(doc_instance.__class__.__name__, bulk_data) @shared_task() def registry_update_task(pk, app_label, model_name):