从 Django 中的特定 post 获取评论数

Getting the number of comments from a specific post in django

我的查询有点问题。我在 django 的博客网站上工作。对于 posts,我有第一页,其中我将所有 posts 显示为列表,以及它们的详细信息(标题、日期 posted 等),我想显示数字每个 post 的评论以及标题、日期 post 和标签。我不确定如何做到这一点,我需要在模型 类 或呈现页面的视图函数中实现一些东西? 这是模型 类.

class Post(models.Model):
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=500)
    content = models.TextField()
    tags = models.CharField(max_length=100)
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title


class Comment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment_text = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.user.username} Comment ' + str(self.id)

和视图函数

def blog(request):

    context = {
        'posts': Post.objects.all(),
        'title': 'Blog',
        'banner_page_title': 'Blog',
        'page_location': 'Home / Blog'
    }
    return render(request, 'blog/blog.html', context)

在模板中使用反向查找并count获取相关对象的数量:

{{ post.comment_set.count }}

是这样的吗?

template.html

...
{% for post in posts %}
  <div> Title: {{post.title}} </div>
  <div> Date Posted: {{post.date_posted}} </div>
  <div> Number of Comments: {{post.comment_set.count}} </div>
{% endfor %}

方法一:

您可以在模板中使用它。

{% for post in posts %}
    {{ post.comment_set.count }}
{% endfor %}

方法二:

您可以像这样实现模型方法:

class Post(models.Model):
    ....
    def __str__(self):
        return self.title

    @property
    def comment_count(self):
        return self.comment_set.count()

您可以像这样在模板中调用模型方法:

{% for post in posts %}
    {{ post.comment_count }}
{% endfor %}