1

亲爱的 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'

知道谁使用它吗?

4

2 回答 2

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根据已基于行组的方式进行分组。

于 2012-05-06T05:49:20.777 回答
0

从值中删除 Count('creation_date') 并在过滤后添加 annotate(Count('creation_date')) 。

于 2012-05-06T05:11:59.307 回答