我的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)
答案 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 docs的Order 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']
然后,您可以将date
与today()
进行比较,看看它们是否匹配,如果不匹配,则用户今天不发布,如果有,则发布count
次。