我正在使用带有很多@detail_route
and的视图集@list_route
。在普通视图集中,我使用serializer_class
,然后在序列化程序中进行一些验证,但在@detail_route
我正在视图中创建序列化程序并在这里检查验证 - 我知道它很糟糕。
我的问题是如何像平常一样@detail_route
使用modelviewset
而无需手动创建序列化程序但serializer_class
在装饰器中使用。
它可以在没有任何附加代码的情况下进行分页@detail_route
吗?
重构代码和移动@detail_route
以及@list_route
分离视图集或保留视图集方法更好吗?
@rest_framework.decorators.detail_route(methods=['post'],
serializer_class=orders_serializers.ChangeOrderStatusSerializer)
def change_status(self, request, pk=None):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
new_status = serializer.validated_data.get('status')
order = self.get_object()
if new_status in [orders_models.Order.EXECUTE, orders_models.Order.OUTSIDE]:
order.status = new_status
order.save()
return Response({
'status': order.get_status_display()
}, status=status.HTTP_200_OK)
else:
return Response('This new status is invalid for this order.',
status=status.HTTP_404_NOT_FOUND)
else:
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)