Фильтр для slug, title не работает в Django rest Framework

Я пытаюсь сделать динамический поиск, но не могу отфильтровать набор запросов по slug. Я перепробовал практически все, просмотрел вопросы на stackoverflow, но ничего не помогает. Я пробовал менять ключевые слова на "id" и "category" и получаю результат, но не по slug.
. Вот ошибка/нет набора запросов, который я получил.
Вот фильтр, который я сделал для авторов и который, кажется, работает.
Вот код, Пожалуйста, сообщите, если мне нужно предоставить больше кода, чтобы понять проблему, так как это мой первый вопрос здесь. Спасибо!

blog_api/views.py

from rest_framework import generics
from blog.models import Post
from .serializers import PostSerializer
from rest_framework.permissions import SAFE_METHODS, IsAuthenticated, IsAuthenticatedOrReadOnly, BasePermission, IsAdminUser, DjangoModelPermissions
from rest_framework import viewsets
from rest_framework import filters
from django.shortcuts import get_object_or_404
from rest_framework.response import Response


class PostUserWritePermission(BasePermission):
    message = 'Editing posts is restricted to the author only.'

    def has_object_permission(self, request, view, obj):

        if request.method in SAFE_METHODS:
            return True

        return obj.author == request.user

     
class PostList(generics.ListAPIView):
    permission_classes = [IsAuthenticated]
    # queryset = Post.objects.all()
    serializer_class = PostSerializer

    def get_queryset(self):
        user = self.request.user
        return Post.objects.filter(author=user)


class PostDetail(generics.RetrieveAPIView, PostUserWritePermission):
    # permission_classes = [PostUserWritePermission]
    queryset = Post.objects.all()
    serializer_class = PostSerializer

    def get_queryset(self):
        item = self.kwargs["pk"]
        print(item)
        return Post.objects.filter(slug=item)

blog_api/urls.py

from .views import PostList, PostDetail
from django.urls import path
from rest_framework.routers import DefaultRouter

app_name = 'blog_api'

# router = DefaultRouter()
# router.register('', PostList, basename='post')
# urlpatterns = router.urls

urlpatterns = [
    path('posts/<str:pk>/', PostDetail.as_view(), name='detail_create'),
    path('', PostList.as_view(), name='list_create'),
]

blog/models.py

from django.db import models
from django.conf import settings
from django.utils import timezone

# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Post(models.Model):

    class PostObjects(models.Manager):
        def get_queryset(self):
            return super().get_queryset().filter(status="published")

    options = (
        ("draft", "Draft"),
        ("published", "Published"),
    )
    category = models.ForeignKey(Category, on_delete=models.PROTECT, default=1)
    title = models.CharField(max_length=250)
    excerpt = models.TextField(null=True)
    content = models.TextField()
    slug = models.SlugField(max_length=250, unique_for_date="published")
    published = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="blog_post")
    status = models.CharField(max_length=10, choices=options, default="published")

    objects = models.Manager()
    post_objects = PostObjects()

    class Meta:
        ordering = ["-published"]

    def __str__(self):
        return self.title
Вернуться на верх