Как получить количество комментариев для каждого сообщения в блоге в ListView через Get_context_data?Фильтрация по self.id/self.object.id/self не работает - PullRequest
0 голосов
/ 20 февраля 2019
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView

from journal.models import Post, Corrections, Comments

class PostListView(ListView):
    model = Post

    def get_context_data(self, **kwargs):
        context = super(PostListView, self).get_context_data(**kwargs)

        context['comment_count'] = Comments.objects.filter(post_id=self.id).count()

        return context

Это неправильная строка кода:

context['comment_count'] = Comments.objects.filter(post_id=self.id).count()

Если я вручную заменю self.id на число, то оно будет правильно захватывать счетчик комментариевpost.

Что приводит меня к моему вопросу:

Как мне получить post.id, если я нахожусь в ListView?

edit:

from django.urls import path
from journal.views import PostListView, PostDetailView

urlpatterns = [
    path('', PostListView.as_view(), name='post-list'),
    path('<int:pk>/', PostDetailView.as_view(), name='post-detail'),
]

1 Ответ

0 голосов
/ 20 февраля 2019

Вы должны были опубликовать свои модели.Предполагая, что у вас есть ForeignKey от Комментария к Посту, и вы не указали related_name, вы можете просто сделать это в своем шаблоне:

 {% for post in object_list %}
    {{ post.title }} # etc
    {{ post.comment_set.count }}
 {% endfor %}

Если вы установили related_name, используйте его вместо comment_set.

...