对 List 和 Retrieve Rest API 使用一种基于类的视图

Qui*_*pl3 5 python django django-rest-framework

我目前有两个不同的基于类的视图,用于详细说明特定对象和列出所有对象:

class StatusList(ListAPIView):
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.StatusSerializer

    def get_queryset(self):
        queryset = helperfunctions.getObjects(self.request.user, models.Status)
        return queryset


class StatusDetail(RetrieveAPIView):
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.StatusSerializer

    def get_queryset(self):
        queryset = helperfunctions.getObjects(self.request.user, models.Status)
        return queryset
Run Code Online (Sandbox Code Playgroud)

请注意,helperfunctions.getObjects() 只是返回与用户共享同一设施的对象,以便他们无法看到不应看到的状态。

我想知道的是是否有一个选项可以为 StatusDetail 和 StatusList 只使用一个基于类的视图,它会自动知道当它在 get 请求中获得 pk 时,它会返回适当的对象,而当没有时,它应该返回整个对象列表。

谢谢你的帮助 :)

idi*_*dik 2

使用视图集,如下所示:

from rest_framework import viewsets, permissions, mixins    
class StatusDetail(mixins.ListModelMixin, #specify wanted mixins
                       mixins.RetrieveModelMixin,
                       viewsets.GenericViewSet): 
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.StatusSerializer

    def get_queryset(self):
        queryset = helperfunctions.getObjects(self.request.user, models.Status)
        return queryset
Run Code Online (Sandbox Code Playgroud)