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]