Фильтрация
Стандартным поведением общих представлений списка в DRF является возврат всего набора запросов для менеджера модели. Часто вы хотите, чтобы ваш API ограничивал элементы, возвращаемые набором запросов.
Самый простой способ отфильтровать QuerySet любого представления, подкласса GenericAPIView, - это переопределить метод .get_queryset().
Переопределение этого метода позволяет вам настраивать QuerySet, возвращаемый представлением, различными способами.
Фильтрация по текущему пользователю
Вы можете захотеть отфильтровать набор запросов, чтобы гарантировать, что будут возвращены только результаты, относящиеся к текущему аутентифицированному пользователю, сделавшему запрос.
Это можно сделать с помощью фильтрации на основе значения request.user, изменим код класса в views.py
from rest_framework import generics
from blog.models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView):
# queryset = Post.objects.all()
serializer_class = PostSerializer
def get_queryset(self):
user = self.request.user
return Post.objects.filter(author=user)
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
Проверим работу, для этого авторизуемся как администратор и зайдем на наш API сервис - http://127.0.0.1:8000/api/:
Мы видим что отобразились все посты, где поле author == 1. Теперь попробуем выйти из под администратора и зайти под другим пользователем. И увидим что данный список Post List будет пуст.