1

我有一个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)
4

1 回答 1

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 docs部分的Order of annotate()andvalues()子句中。

values返回一个类似listdicts

[{'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时间。

于 2012-04-14T20:06:28.723 回答