Встречается на собеседованиях • сегодня

Внутри ли транзакции вызывается post_save

Да, сигнал post_save вызывается внутри транзакции. Когда вы сохраняете модель с помощью save(), Django автоматически оборачивает операцию в транзакцию (если не отключено в настройках). Сигнал post_save срабатывает после успешного сохранения, но до фиксации транзакции. Это важно учитывать, если в обработчике сигнала выполняются критические операции.

Пример:

python
from django.db import transaction
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=MyModel)
def handle_post_save(sender, instance, created, **kwargs):
    # Этот код выполняется внутри транзакции
    if created:
        print("New instance created, but transaction not committed yet")
    
    # Если здесь произойдет исключение, транзакция откатится

Если транзакция будет откачена, изменения, сделанные в обработчике post_save, также откатятся. Для операций, которые должны выполняться после успешного коммита, используйте transaction.on_commit().

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы