Происходит ли вызов post_save внутри транзакционной операции?
Ответ от нейросети
sobes.tech AI
В Django сигнал post_save вызывается сразу после сохранения объекта модели, но не обязательно внутри транзакционной операции.
Если сохранение происходит внутри явной транзакции (например, с использованием transaction.atomic()), то post_save срабатывает в момент сохранения, но транзакция может быть ещё не зафиксирована (commit). Это значит, что обработчики post_save могут видеть изменения до фиксации транзакции.
Если важно, чтобы код выполнялся после успешного коммита транзакции, следует использовать сигнал transaction.on_commit(), который позволяет зарегистрировать функцию, вызываемую именно после фиксации транзакции.
Пример:
from django.db import transaction
@receiver(post_save, sender=MyModel)
def my_handler(sender, instance, **kwargs):
transaction.on_commit(lambda: do_something(instance))
Таким образом, post_save вызывается при сохранении, но не гарантирует, что транзакция уже завершена.