|
1 | 1 | """Attach django-opensearch-dsl to Django's signals and cause things to index.""" |
2 | 2 |
|
3 | 3 | import abc |
| 4 | +from functools import partial |
4 | 5 |
|
5 | 6 | from django.apps import apps |
6 | 7 | from django.core.serializers import deserialize, serialize |
7 | | -from django.db import models |
| 8 | +from django.db import models, transaction |
8 | 9 | from django.dispatch import Signal |
9 | 10 |
|
10 | 11 | from .apps import DODConfig |
@@ -109,8 +110,21 @@ class CelerySignalProcessor(RealTimeSignalProcessor): |
109 | 110 | def handle_save(self, sender, instance, **kwargs): |
110 | 111 | """Update the instance in model and associated model indices.""" |
111 | 112 | 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 | + ) |
113 | 121 |
|
114 | 122 | def handle_pre_delete(self, sender, instance, **kwargs): |
115 | 123 | """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