Отправка и получение пользовательских сигналов в Django и обеспечение их атомарности

Я хочу создать пользовательский сигнал и отправлять его после некоторых операций с базой данных. Приемник также выполняет операции с базой данных. Я хочу убедиться, что все операции с базой данных перед отправкой сигнала и в сигнале приемника являются атомарными, то есть либо все неудачные, либо все удачные.

Рассмотрим следующий код:

def send_my_signal():
    # Database operation 1
    # Database Operation 2
    my_signal.send(sender=MyModel)

Приемник:

@receiver(my_signal)
def my_receiver(sender, **kwargs):
    # Database operation 3
    # Database operation 4

Я хочу, чтобы все операции с базой данных с 1 по 4 были успешными или провалились вместе. По просьбе генеративных моделей ИИ одно из предложенных решений - обернуть тело функции, выполняющей операции с базой данных и посылающей сигнал, внутри контекстного менеджера transaction.atomic(). Таким образом, код будет выглядеть так:

def send_my_signal():
    with transaction.atomic():
        # Database operation 1
        # Database Operation 2
        my_signal.send(sender=MyModel)

Но я не смог найти ни одного ресурса или чего-либо в документации Django, подтверждающего это. Я же не вызываю приемник сигнала внутри менеджера контекста transaction.atomic(), я просто отправляю туда сигнал.

Вернуться на верх