【问题标题】:Django count specific items of a many-to-one relationshipDjango计算多对一关系的特定项目
【发布时间】:2011-10-10 14:31:09
【问题描述】:

我有一个 Django 应用程序,用户可以在其中发布消息,其他用户可以对答案进行投票,这与 SO 非常相似。我在尝试从模板中获取“竖起大拇指”和“竖起大拇指”计数时遇到问题,我希望有人可以帮助我。 PostVote 与 Post 类是多对一的关系。这是我的模型的样子:

class Post(models.Model):
    account = models.ForeignKey(Account)
    message = models.CharField(max_length=1024)
    timestamp = models.DateTimeField('post timestamp')

class PostVote(models.Model):
    post = models.ForeignKey(Post)
    account = models.ForeignKey(Account)
    vote = models.CharField(max_length=16, choices=VOTE_CHOICES)
    timestamp = models.DateTimeField('vote timestamp')

这是我获取帖子的方式:

posts = Post.objects.all().order_by('-timestamp')[:10]

我的模板大致如下:

{% for post in posts %}
<div>Thumbs up count: {{ WHAT_HERE }}</div>
<div>Thumbs down count: {{ WHAT_HERE }}</div>
{% endfor %}

我怎样才能得到那里的计数?我确信它以某种方式涉及“注释”,但我很难想出这个。任何帮助将不胜感激!

【问题讨论】:

  • 在视图中进行计数,将它们作为参数传递;或者传入查询集,使用 queryset.count(模板中没有括号)。
  • 感谢 Marcin 的回复,Matt 的回答奏效了。我正在向我的模板传递一个帖子列表,所以传递计数是行不通的。不过,我感谢您的帮助。

标签: python django many-to-one


【解决方案1】:

您不应该真的在模板中做逻辑。为您的 Post 模型添加几个计数方法:

class Post(models.Model):
    account = models.ForeignKey(Account)
    message = models.CharField(max_length=1024)
    timestamp = models.DateTimeField('post timestamp')

    def upvote_count(self):
        return self.postvote_set.filter(vote=VOTE_CHOICES[0][0]).count()

    def downvote_count(self):
        return self.postvote_set.filter(vote=VOTE_CHOICES[1][0]).count()

然后在您的模板中使用它们:

{% for post in posts %}
<div>Thumbs up count: {{ post.upvote_count }}</div>
<div>Thumbs down count: {{ post.downvote_count }}</div>
{% endfor %}

【讨论】:

  • 谢谢!呸!我不知道为什么我没有考虑将功能添加到模型中。非常感谢,正好解决了我的问题。干杯!
猜你喜欢
  • 2022-01-02
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2015-08-11
  • 2012-03-05
  • 2015-11-25
相关资源
最近更新 更多