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名前 (ここ) を使用またはカスタマイズする必要があります。 また、列を制限する前に、編集する列を最後に宣言します。すでに行のグループに基づいているグループ化する必要はありません。ccdaggregate()
values()aggregategroup byvalue()selectCOUNT

于 2012-05-06T05:49:20.777 に答える
0

値から Count('creation_date') を削除し、フィルターの後に annotate(Count('creation_date')) を追加します。

于 2012-05-06T05:11:59.307 に答える