Отложенное изменение статуса Feedback после его создания

Передавайте в задачу первичный ключ Feedback и ставьте её после commit. В worker заново читайте запись или выполняйте условное обновление статуса.

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

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

Передавайте в задачу первичный ключ Feedback и ставьте её после commit. В worker заново читайте запись или выполняйте условное обновление статуса.

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

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

Условие

В процессе работы создаётся экземпляр модели Feedback, после чего инициируется Celery‑задача change_status_feedback, которая должна переключить поле status на значение 'in_progress'. Требуется провести ревью кода: убедиться, что задача вызывается корректно, аргументы передаются в подходящем виде, взаимодействие с ORM реализовано без ошибок, а также оценить потенциальные исключения во время выполнения.

from asset_main.celery import app

@app.task(name='change_status_feedback')
def change_status_feedback(feedback):
    feedback.status = 'in_progress'
    feedback.save()

feedback = Feedback.objects.create(**validate_data)
change_status_feedback.delay(feedback)

Ответ

Передавайте в задачу первичный ключ Feedback и ставьте её после commit. В worker заново читайте запись или выполняйте условное обновление статуса.

from django.db import transaction

@app.task(name='change_status_feedback')
def change_status_feedback(feedback_id):
    return Feedback.objects.filter(
        pk=feedback_id, status='new'
    ).update(status='in_progress')

with transaction.atomic():
    feedback = Feedback.objects.create(**validate_data)
    transaction.on_commit(
        lambda pk=feedback.pk: change_status_feedback.delay(pk)
    )

new замените фактическим начальным статусом модели. ORM-объект обычно не сериализуется JSON-сериализатором Celery, а ID сериализуется. Повтор задачи не должен возвращать завершённую запись в работу. Учтите удаление записи, ошибки БД и недоступность брокера; on_commit не заменяет outbox, если доставка задания обязательна.

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

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

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

Подробнее