【发布时间】:2019-04-27 06:15:30
【问题描述】:
我正在学习 Django 尝试创建博客。我在主页上有一个 Post 模型的 ListView。我正在尝试添加新的上下文数据(来自 ListView 中每个项目的单独模型注释中的 cmets 数量)。但是,我无法使用 __in 正确过滤每个帖子的评论数量(它只显示 ListView 的每个帖子项目的评论总数相同)。您能否帮助我了解如何获得正确的过滤器以显示每个 ListView Post 项目有多少评论?
谢谢!
帖子模型:
class Post(models.Model):
class Meta:
verbose_name = 'запись'
verbose_name_plural = 'записи'
title = models.CharField('название', max_length=300, help_text='Не более 300 знаков')
content = models.TextField('текст записи')
date_posted = models.DateTimeField('дата публикации', default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='автор')
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
评论模型:
class Comment(models.Model):
class Meta:
verbose_name = 'комментарий'
verbose_name_plural = 'комментарии'
content = models.CharField('текст комментария', max_length=500, help_text='Не более 500 знаков')
date_posted = models.DateTimeField('дата публикации', default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name = 'автор')
postid = models.ForeignKey(Post, on_delete=models.CASCADE)
views.py 中的列表视图:
class PostListView(ListView):
model = Post
template_name = 'blog/home.html'
context_object_name = 'posts'
ordering = ['-date_posted']
paginate_by = 5
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['comments'] = Comment.objects.filter(postid__in = self.object_list)
return context
我在 html 模板中使用的上下文数据:
{% for post in posts%}
{{ post.content }}
{{ comments.count }}
{% endfor %}
【问题讨论】: