Фильтрация по URL
Другой стиль фильтрации может включать ограничение набора запросов на основе некоторой части URL. Например, если мы добавим в нашу конфигурацию urls.py приложения blog_api запись:
from django.urls import path, re_path
from .views import PostList, PostDetail, UserPostList
urlpatterns = [
path("<int:pk>/", PostDetail.as_view(), name="post_detail"),
path("", PostList.as_view(), name="post_list"),
re_path('^user/(?P<id>.+)/$', UserPostList.as_view()), # new
]
Затем вы можете написать представление в blog_api/views.py, которое возвращает набор постов, отфильтрованный по имени пользователя в части URL:
class UserPostList(generics.ListAPIView):
serializer_class = PostSerializer
def get_queryset(self):
user = self.kwargs['id']
return Post.objects.filter(author=user)
Давайте будем проверять работу, для этого закомментируем функцию get_queryset в классе PostList. А переменную queryset раскомментируем.
Теперь авторизуемся как пользователь и попробуем добавить новый пост в наш блог через апи:
И мы видим что наш пост добавился от author с id = 16.
Теперь перейдем по адресу http://127.0.0.1:8000/api/user/16/ и мы увидим все посты данного пользователя:
А если мы перейдем по адресу http://127.0.0.1:8000/api/user/1/ то там данного поста не будет, так как мы делаем фильтрацию постов по пользователю.