Django rest позволяет получать, но не перечислять

Я хочу разрешить get для получения одного объекта для гостевых пользователей. Но оставить list, который возвращает все объекты этой модели в базу данных только для администраторов. Но я не уверен, как разделить get и list, потому что они оба, с моей точки зрения, находятся под get.

Ниже приведен мой набор представлений:

class OrdersViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticated|ReadOnly]
    serializer_class = OrderSerializer
    queryset = Order.objects.all()
    # parser_classes = (MultiPartParser,)
    model = Order
    def update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return super().update(request, *args, **kwargs)

И мой ReadOnly:

from rest_framework.permissions import BasePermission, IsAuthenticated, SAFE_METHODS
class ReadOnly(BasePermission):
    def has_permission(self, request, view):
        return request.method in SAFE_METHODS

Вы можете использовать функцию get_permission и action.

class OrdersViewSet(viewsets.ModelViewSet):
    permission_classes = [IsAuthenticated|ReadOnly]
    serializer_class = OrderSerializer
    queryset = Order.objects.all()
    # parser_classes = (MultiPartParser,)
    model = Order
    def update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return super().update(request, *args, **kwargs)

    def get_permissions(self):
        if self.action == 'list':
            permission_classes = [IsAdmin]
        elif self.action == 'retrieve':
            permission_classes = [AllowAny]
        else:
            permission_classes = [ReadOnly]
    return [permission() for permission in permission_classes]
Вернуться на верх