From c82be665bffa8eec7269bcfd94b3b8129b518b1b Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Tue, 16 Feb 2021 20:32:16 +0100
Subject: [PATCH] Replace default app Task with a task that runs on_commit

---
 aleksis/core/celery.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/aleksis/core/celery.py b/aleksis/core/celery.py
index 27a67c539..b9f0518fe 100644
--- a/aleksis/core/celery.py
+++ b/aleksis/core/celery.py
@@ -1,5 +1,7 @@
 import os
 
+from django.db import transaction
+
 from celery import Celery
 
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings")
@@ -7,3 +9,14 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings")
 app = Celery("aleksis")  # noqa
 app.config_from_object("django.conf:settings", namespace="CELERY")
 app.autodiscover_tasks()
+
+
+class OnCommitTask(app.Task):
+    """Task that is delayed at least until the current transaction commits."""
+    def delay(self, *args, **kwargs):
+        def _real_delay():
+            return super().delay(*args, **kwargs)
+        transaction.on_commit(_real_delay)
+
+
+app.Task = OnCommitTask
-- 
GitLab