Skip to content

Commit 08e1e3c

Browse files
committed
Runs celery task on_commit
1 parent e77526f commit 08e1e3c

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

django_opensearch_dsl/signals.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"""Attach django-opensearch-dsl to Django's signals and cause things to index."""
22

33
import abc
4+
from functools import partial
45

56
from django.apps import apps
67
from django.core.serializers import deserialize, serialize
7-
from django.db import models
8+
from django.db import models, transaction
89
from django.dispatch import Signal
910

1011
from .apps import DODConfig
@@ -109,8 +110,21 @@ class CelerySignalProcessor(RealTimeSignalProcessor):
109110
def handle_save(self, sender, instance, **kwargs):
110111
"""Update the instance in model and associated model indices."""
111112
if instance.__class__ in registry.get_models():
112-
handle_save_task.delay(instance._meta.app_label, instance.__class__.__name__, instance.pk)
113+
transaction.on_commit(
114+
partial(
115+
handle_save_task.delay,
116+
app_label=instance._meta.app_label,
117+
model=instance.__class__.__name__,
118+
pk=instance.pk,
119+
)
120+
)
113121

114122
def handle_pre_delete(self, sender, instance, **kwargs):
115123
"""Delete the instance from model and associated model indices."""
116-
handle_pre_delete_task.delay(serialize("json", [instance], cls=DODConfig.signal_processor_serializer_class()))
124+
handle_pre_delete_task.delay(
125+
serialize(
126+
"json",
127+
[instance],
128+
cls=DODConfig.signal_processor_serializer_class(),
129+
)
130+
)

0 commit comments

Comments
 (0)