В файле views.py ### category_posts = Post.objects.filter(category = cat) ### RETURNS AN EMPTY QUERY SET

Я создаю приложение для блога на django и столкнулся с необычной проблемой. Я не могу отфильтровать и отобразить записи блога по категориям. Пожалуйста, приведите мой код ниже. Заранее спасибо.

MODELS.py

Это модель, которую я создал для статьи в блоге.

class Post(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField()
    post_date = models.DateField(auto_now_add=True)
    category = models.CharField(max_length=255, default="uncategorized")

    def __str__(self):
        return self.title + ' | ' + str(self.author)

    def get_absolute_url(self):
        #return reverse('article-detail', args=(str(self.id)))
        return reverse('homepage')

VIEWS.py

Вот представление, которое я создал для категории постов блога.

def CategoryView(request,cats):
    category_posts = Post.objects.filter(author= 'apaar')
    return render(request,'categories.html',{'cat':cat,'category_posts':category_posts})

URLS.py

Файл urls.py.

    path('category/<str:cat>/', CategoryView, name = 'category'),

CATEGORIES.html

Это будет последняя страница отображения, где category_posts отображается как пустой queryset. Цикл for не может быть запущен, потому что category_posts является пустым набором запросов.

{% extends 'base.html' %}
{% load static %}

{% block content %}
<h1>Categories</h1>
<ul>
{% for posts in category_posts %}
<li>
    <div class="category"><a href="{% url 'category' post.category|slugify %}">{{ post.category }}</a></div>
    <a href="{% url 'article-detail' post.pk  %}"><h3><b>{{ post.title }} </b></h3>

    <p class=card-date>    <big>{{ post.author }}</big><small> -{{ post.post_date }}     </small> </p>
    <p class="excerpt-text">{{ post.body | slice:"100" |safe}}</p>

    <div class="article-thumbnail">
      <img src="{% static "images/bg.png" %}" alt="article-thumbnail" >
    <div class="overlay"></a>
</li>
{% endfor %}

{% endblock %}

Насколько я понимаю, вы хотите сделать следующее:

def CategoryView(request,cat):
    category_posts = Post.objects.filter(category=cat)
    return render(request,'categories.html',{'category_posts':category_posts})

Используйте cat в качестве параметра, поскольку вы используете <str:cat> в urls.py, иначе вы можете получить ошибку "Unexpected parameter".
Вы должны фильтровать по category, а не по author. Ваш вопрос корректен, но ваш код не корректен.
Вам не нужно передавать cat varibale в контексте, так как любые сообщения будут содержать его в себе.

Принимая предложения @Willem Van Onsem и @Roham:

{% for post in category_posts %}
# ...
    <div class="category"><a href="{% url 'category' post.category    %}">{{ post.category }}</a></div>

Если вы хотите использовать слизни, возможно, проверьте models.SlugField.

Вернуться на верх