def make_order():

Фрагмент создаёт заказ и сразу ставит задачу уведомления. Если он работает внутри внешней транзакции, воркер может получить order.id раньше commit; отправку нужно отложить до успешной фиксации.

Короткий ответ

Что ответить на собеседовании

Фрагмент создаёт заказ и сразу ставит задачу уведомления. Если он работает внутри внешней транзакции, воркер может получить order.id раньше commit; отправку нужно отложить до успешной фиксации.

Подробный разбор

Ответ с пояснениями

Условие

def make_order():

order = Order.objects.create(...)

print(order.id)

notify_order_created.delay(order.id)

Ответ

Фрагмент создаёт заказ и сразу ставит задачу уведомления. Если он работает внутри внешней транзакции, воркер может получить order.id раньше commit; отправку нужно отложить до успешной фиксации.

Само получение order.id не означает commit. Пример предполагает, что Order и задача определены в проекте:

from functools import partial
from django.db import transaction

def make_order():
    with transaction.atomic():
        order = Order.objects.create(...)
        transaction.on_commit(
            partial(notify_order_created.delay, order.id)
        )
    return order

Многоточие обозначает обязательные поля конкретной модели. Без внешней транзакции исходное create при autocommit уже зафиксировано, так что гонка не обязательна. Для гарантированной доставки при сбоях между commit и брокером применяют outbox.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее