Обновление статуса обратной связи через отложенный Celery‑задачу

В текущем виде задача не гарантирует смену статуса: ORM-объект не подходит для JSON Celery, а APIView использован неверно. Передавайте id после commit; фоновая задача выполняется позже, не «сразу».

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

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

В текущем виде задача не гарантирует смену статуса: ORM-объект не подходит для JSON Celery, а APIView использован неверно. Передавайте id после commit; фоновая задача выполняется позже, не «сразу».

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

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

Условие

Проверьте, что отложенный вызов Celery‑задачи корректно меняет поле status у модели Feedback сразу после её создания.

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

class CreateFeedbackAPIView(APIView):
    def create(self, request):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        fb = Feedback.objects.create(**serializer.validated_data)
        change_status_feedback.delay(fb)
        return fb

Ответ

В текущем виде задача не гарантирует смену статуса: ORM-объект не подходит для JSON Celery, а APIView использован неверно. Передавайте id после commit; фоновая задача выполняется позже, не «сразу».

Нужен CreateAPIView с сериализатором или корректный post() у APIView. Ответом должен быть Response с сериализованными данными. После создания используйте on_commit для постановки задачи по fb.pk.

В worker загрузите запись и выполняйте допустимый переход статуса с защитой от повторов, например условным UPDATE по текущему состоянию. Если статус должен стать in_progress уже в ответе на создание, задайте его синхронно при сохранении; Celery нельзя использовать как гарантию немедленного изменения. Отправку в брокер также нужно учитывать как операцию, которая может завершиться ошибкой.

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

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

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

Подробнее