Разные разрешения для разных методов в представлении декоратора действий?
У меня есть декоратор действия в 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]