如何在Django中使用注释获取每天的帖子数量?

时间:2012-04-14 19:58:07

标签: python django django-queryset annotate

我的Post模型的datetime.date字段为posted_date。我需要查找用户每天发布的帖子数量。为每一天创建查询似乎很愚蠢。

我无法弄清楚如何使用注释来进行聚合API查询。

Post.objects.filter(author=someuser).annotate(dailycount=Count('posted_day'))

正确的方法?然后,我如何使用它来获取特定日期的帖子数量?

我的模特是:

class Post(models.Model):
    posted_day=models.DateField(default=date.today)
    author=models.ForeignKey(User,null=True)

1 个答案:

答案 0 :(得分:1)

你快到了。您还需要两个附加条款:

day_counts = Post.objects.filter(author=someuser).values('posted_day').annotate(
                                       dailycount=Count('posted_day')).order_by()

values('posted_day')启用分组,空order_by确保结果按posted_day排序,因此默认排序不会产生干扰。

最清晰的文档似乎位于Django Aggregation docsOrder of annotate() and values() clauses部分。

values返回list dicts,如:

[{'posted-day': 'the-first-day', 'dailycount': 2}, . . . ,
 {'posted-day': 'the-last-day', 'dailycount': 3}]

所以,如果你想要用户发布的最后一天,它将是列表中的最后一项:

last_day_dict = day_counts[-1]
date = last_day_dict['posted_day']
count = last_day_dict['dailycount']

然后,您可以将datetoday()进行比较,看看它们是否匹配,如果不匹配,则用户今天不发布,如果有,则发布count次。