【问题标题】:Getting the number of comments from a specific post in django从 django 中的特定帖子获取评论数
【发布时间】:2020-11-15 17:20:12
【问题描述】:

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

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)

【问题讨论】:

    标签: python django web blogs


    【解决方案1】:

    方法一:

    您可以在模板中使用它。

    {% 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 %}
    

    【讨论】:

      【解决方案2】:

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

      {{ post.comment_set.count }}
      

      【讨论】:

        【解决方案3】:

        这样的?

        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 %}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-31
          • 1970-01-01
          • 2014-05-04
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          • 2018-10-21
          相关资源
          最近更新 更多