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]