Фреймворк 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
Проблемы
- Настройка
serializer_class = None
внутри@action
не работает. - Возврат None в
get_serializer_class
приводит к ошибке "Объект, не имеющий определенного типа, не может быть вызван"
Теперь я создал пустой сериализатор, чтобы обойти требование DRF, но для меня это выглядит непосильным трудом. Есть ли какой-нибудь лучший способ сделать это.
Я думаю, что требуются сериализаторы, и, насколько мне известно, именно так был разработан django для использования ModelViewSet.
Все, что вам нужно, - это APIView
from rest_framework.views import APIView