首页 > 解决方案 > 自定义 ViewSet 操作的 DRF 文档中的架构不正确

问题描述

我有这样的 ViewSet:

class CarViewSet(ModelViewSet):
"""
Работа пользователя с его машинами.
"""
serializer_class = CarSerializer
permission_classes = [IsUser]
filter_fields = '__all__'
ordering_fields = '__all__'

def perform_create(self, serializer):
    serializer.save(user=self.request.user.useraccount)

def get_queryset(self):
    return Car.objects.filter(user=self.request.user)

@action(methods=['POST'], detail=True)
def set_default(self, request, pk=None):
    """
    Установить указанную машину по умолчанию
    """
    car = get_object_or_404(self.get_queryset(), pk=pk)
    car.is_default = True
    car.save()
    return Response()

在 rest_framework.documentation 页面中,我看到了“set_default”操作的这种形式: 在此处输入图像描述

问题是“set_default”实际上不需要提供所有这些字段,它只需要(并使用)id!

我能用这个做什么?

标签: pythondjangodjango-rest-framework

解决方案


如果您不需要在正文中发送这些数据,那么为什么不使用get方法呢?

@action(methods=['GET'], detail=True)
def set_default(self, request, pk=None):
    """
    Установить указанную машину по умолчанию
    """
    car = get_object_or_404(self.get_queryset(), pk=pk)
    car.is_default = True
    car.save()
    return Response({"updated":True})

推荐阅读