亲爱的StackOverFlow社区:
我在执行以下SQL查询时需要您的帮助。
select DATE(creation_date), COUNT(creation_date) from blog_article WHERE creation_date BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE() GROUP BY DATE(creation_date) AND author="scott_tiger";
这是我的Django模型
class Article(models.Model):
title = models.CharField(...)
author = models.CharField(...)
creation_date = models.DateField(...)
如何使用aggregate()和annotate()函数形成上述Django查询。我创造了这样的东西 -
now = datetime.datetime.now()
date_diff = datetime.datetime.now() + datetime.timedelta(-30)
records = Article.objects.values('creation_date', Count('creation_date')).aggregate(Count('creation_date')).filter(author='scott_tiger', created_at__gt=date_diff, created_at__lte=now)
当我运行此查询时,它会给我以下错误 -
'Count' object has no attribute 'split'
知道该使用它吗?
答案 0 :(得分:0)
从值中删除Count('creation_date')并在过滤后添加注释(Count('creation_date'))。
答案 1 :(得分:0)
尝试
records = Article.objects.filter(author='scott_tiger', created_at__gt=date_diff,
created_at__lte=now).values('creation_date').aggregate(
ccd=Count('creation_date')).values('creation_date', 'ccd')
您需要在creation_date__count
之后使用ccd
或自定义名称(此处为aggregate()
)来引用计数结果列。
此外,values()
限制aggregate
列之前的group by
和最后value()
列声明列为select
。无需按COUNT
分组,该{{1}}已基于行组。