Фреймворк Django REST: Пользовательское действие (POST) без сериализатора

Я использую Django REST Framework (DRF) и у меня есть ModelViewSet с пользовательским действием (@action) для отмены заказа. Действие отмены не требует использования сериализатора, поскольку оно только изменяет базу данных и возвращает ответ. Однако, когда я устанавливаю serializer_class = None, оно работает не так, как ожидалось.

Вот мой ViewSet:


class OrderViewSet(ModelViewSet):
    http_method_names = ['get', 'post', 'patch', 'delete', 'head', 'options']

    @action(detail=True, methods=['post'], permission_classes=[IsAuthenticated], serializer_class=None #Not Working)
    def cancel(self, request, pk=None):
        order = self.get_object()
        OrderService.cancel_order(order, request.user)
        return Response({'status': 'Order cancelled'}, status=status.HTTP_200_OK)

    def get_serializer_class(self):
        if self.action == 'cancel':
            return None  # Causes an error
        if self.action == 'cancel':
            return EmptySerializer # This way works
        if self.request.method == 'POST':
            return CreateOrderSerializer
        elif self.request.method == 'PATCH':
            return UpdateOrderSerializer
        return OrderSerializer

Проблемы

  1. Настройка serializer_class = None внутри @action не работает.
  2. Возврат None в get_serializer_class приводит к ошибке "Объект, не имеющий определенного типа, не может быть вызван"

Теперь я создал пустой сериализатор, чтобы обойти требование DRF, но для меня это выглядит непосильным трудом. Есть ли какой-нибудь лучший способ сделать это.

Я думаю, что требуются сериализаторы, и, насколько мне известно, именно так был разработан django для использования ModelViewSet.

Все, что вам нужно, - это APIView

from rest_framework.views import APIView
Вернуться на верх