Как ограничить, чтобы автор сообщения мог видеть и редактировать только свои сообщения
В этом коде только автор сообщения может редактировать свое сообщение, но как сделать так, чтобы автор сообщения мог видеть только свои сообщения?
from rest_framework import permissions
class IsAuthorOrReadOnly(permissions.BasePermission):
def has_permission(self, request, view):
if request.user.is_authenticated:
return True
return False
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.author == request.user
Пожалуйста, добавьте ссылку на полезные материалы для чтения
Мой views.py:
class TaskList(generics.ListCreateAPIView):
# permission_classes = (IsAuthorOrReadOnly,)
queryset = Task.objects.all()
serializer_class = TaskSerializer
class TaskDetail(generics.RetrieveUpdateDestroyAPIView):
# permission_classes = (IsAuthorOrReadOnly,)
queryset = Task.objects.all()
serializer_class = TaskSerializer
Если вы хотите, чтобы автор видел свои сообщения, вы можете просто ограничить доступ к объекту всем пользователям. Например, так:
from rest_framework import permissions
class IsAuthorOrReadOnly(permissions.BasePermission):
def has_permission(self, request, view):
if request.user.is_authenticated:
return True
return False
def has_object_permission(self, request, view, obj):
return obj.author == request.user
Теперь, независимо от любых типов методов запроса, только автор может получить доступ к объекту.
Но если у вас есть представление списка, и вы не хотите, чтобы автор видел другие сообщения, вы можете попробовать вот так:
class TaskList(generics.ListCreateAPIView):
queryset = Task.objects.all()
serializer_class = TaskSerializer
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user)
class TaskDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Task.objects.all()
serializer_class = TaskSerializer
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user)
Или объединить их в viewset:
class TaskViewSet(viewsets.ModelViewSet):
"""
A simple ViewSet for viewing and editing tasks.
"""
permission_classes = [IsAuthenticated,]
queryset = Task.objects.all()
serializer_class = TaskSerializer
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user)
Большую информацию можно найти в документации