Разные разрешения для разных методов в представлении декоратора действий?

У меня есть декоратор действия в ViewSet, который принимает два метода:

class ItemViewSet(viewsets.ModelViewSet):
  queryset = Item.objects.all()
  serializer = DefaultItemSerializer

  @action(detail=True, method=["get", "post"], permission_classes=[AllowAny])
  def custom_action(self, request, pk):
    qs = self.get_object()
    if request.method == "GET":
         return Response(CustomItemSerializer(qs).data, status=200)
    else:
      serializer = CustomItemSerializer(qs, data=request.data)
      if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=201)
      return Response(serializer.data, status=400)

В настоящее время оба get и post имеют одинаковое разрешение AllowAny.

Что если я хочу, чтобы они были разными? Например, get должен быть AllowAny, а post должен быть только IsAdminUser

class ItemViewSet():

  def get_permissions(self):
    permission_classes = [AllowAny]
    if self.action == "custom_action":
      if self.request.method == "GET":
        permission_classes = [AllowAny]
      elif self.request.method == "POST":
        permission_classes = [IsAdmin]
    return [permission() for permission in permission_classes]

Вернуться на верх