Django Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки Ошибка

У меня возникла проблема, когда я хочу показать все сообщения, относящиеся к категории. Я не смог найти решение в других подобных вопросах. Спасибо. Ошибка: Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки.

Модель:

class Category(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField()

class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)

    def get_absolute_url(self):
        return reverse("post", kwargs={'slug': self.slug})

View :

class PostListView(ListView):
"""
Return all of the posts
"""
model = Post
ordering = '-created' 
context_object_name = 'posts'
template_name ='blog/post_list.html'

def get_queryset(self):
    qs = Post.objects.all()
    if self.kwargs.get('slug'):
        category_slug = self.kwargs.get('slug')
        qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug))
    return qs

URL:

path('', PostListView.as_view(), name='posts'), # all of the posts
path('category/<slug:slug>/', PostListView.as_view(), name='categoryposts'),

Шаблон:

    <div class="row">
        {% for post in posts %}
            <div class="col-md-4">
                <div class="card" style="width: 25rem; height: 34rem;">
                    <a href="{% url 'post' post.slug %}">
                        <img class="post-thumbnail card-img-top" src="{{post.thumbnail.url}}" alt="{{post.title}}" 
                        style="width: 24.9rem; height: 18rem;">
                    </a>
                    <div class="card-body">
                        <h5 class="card-title"><a href="{% url 'post' post.slug %}">{{post.title}}</a></h5>
                        <p class="post-updated">Last update at {{post.updated|date:"Y/M/d"}}</p>
                        <p>Post by <a href="">{{post.author}}</a></p>
                        {% if post.description %}
                        <p class="card-text">{{post.description|slice:"80"}}...</p>
                        {% else %}
                        <p class="card-text">{{post.body|slice:"80"}}...</p>
                        {% endif %}
                        <a href="{% url 'post' post.slug %}" class="btn btn-primary" style="position: absolute; bottom: 0.5rem;">Read</a>
                    </div>
                </div>
                <br>
            </div>
        {% endfor %}
    </div>

Я думаю, что проблема в вашей строке qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug)). Если вы хотите фильтровать посты по slug вы можете сделать это с помощью __in.

qs = Post.objects.filter(category = Category.objects.filter(slug__in = category_slug))

Если возникнет какая-либо ошибка, укажите ее в комментарии. Спасибо.

Я нашел ответ. если у вас такая же проблема, в строке qs напишите следующее :

category_slug = self.kwargs.get('slug')
category = Category.objects.get(slug = category_slug)
category_id = Category.objects.get(id = category.id)
qs = Post.objects.filter(category = category_id)

вместо этого:

category_slug = self.kwargs.get('slug')
qs = Post.objects.filter(category = Category.objects.filter(slug = category_slug))
Вернуться на верх