📜  @action(detail=true) 含义 - Python (1)

📅  最后修改于: 2023-12-03 15:29:14.177000             🧑  作者: Mango

@action(detail=true) 的含义 - Python

@action(detail=true) 是 Django REST Framework 中的装饰器之一,用于自定义 API 视图类中的方法。当在视图类中使用 @action(detail=true) 装饰器时,表示该方法为特定资源对象的详细信息操作,需要传递一个特定的资源对象的主键作为 URL 参数。

在 Django REST Framework 中,视图类通常继承自 APIView 或者 GenericAPIView,但这些视图类中的方法仅限于 CRUD 操作,而无法满足一些非标准的业务需求。因此,我们需要自定义 API 视图类中的方法。

使用 @action(detail=true) 装饰器时,需要注解 detail=true 参数,表示需要接收特定资源对象的主键作为 URL 参数。例如:

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

class MyViewSet(viewsets.ViewSet):
    @action(detail=True, methods=['get'])
    def my_detail(self, request, pk=None):
        """
        获取特定资源对象的详细信息
        """
        queryset = MyModel.objects.filter(pk=pk)
        serializer = MySerializer(queryset, many=True)
        return Response(serializer.data)

在上面的代码中,我们定义了一个名为 my_detail 的方法,并使用 @action(detail=true) 装饰器将其标识为特定资源对象的详细信息操作。在该方法中,我们通过传入的主键 pk 来获取特定资源对象,并将其序列化后返回。

总之,@action(detail=true) 装饰器是 Django REST Framework 中自定义 API 视图类中方法必不可少的装饰器之一,它可以让我们满足更为复杂的业务需求。