Вот решение этой задачи:
class PostListView(ListView):
'''Список постов'''
model = Post
template_name = 'blog/index.html'
ordering = 'pub_date'
paginate_by = 10
def get_queryset(self):
return super().get_queryset().filter(
category__is_published=True,
is_published=True,
pub_date__lte = timezone.now()
).annotate(comment_count=Count("comments"))
С помощью get_queryset достаём из модели Post все посты, далее фильтруем посты (посты и их категория должны быть опубликованы) и добавляем аннотацию, которая считает комментарии в этих постах.