2012-04-18 12 views
1

私はdate日付でグループ化するときに注釈を付けるdatetimefieldを持つモデルを持っています。datetimefieldの日付別Django + PostGresSQLグループ

例:

order_totals = Transfer.objects.filter(created__range=[datetime.datetime.combine(datetime.date.today(), datetime.time.min) + datetime.timedelta(days=-5), datetime.datetime.combine(datetime.date.today(), datetime.time.max)]).values('created').annotate(Count('id')) 

上記の問題点は、それが日時フィールドの毎秒/ミリ秒というし、ちょうど日付別のグループです。

どうすればいいですか?

乾杯、 ベン

答えて

2

あなたはQuerySet.extraを使用することによってこの問題を解決し、クエリ

などに列を追加することができるはずです。

qs.filter(...).extra(select={'created_date': 'created::date'}).values('created_date') 
+0

大変ありがとうございました! –

1

Django 1.8に開始し、あなたも使用できる新しいDateTime expression(変なふうに、それはbuilt-in expressionsシートに記載されていないのです)。

import pytz 
from django.db.models.expressions import DateTime 

qs.annotate(created_date=DateTime('created', 'day', pytz.UTC)) 

あなたはcreated_dateによってグループ化したい場合は、単に別の集計式をチェーン:

qs.annotate(created_date=DateTime('created', 'day', pytz.UTC)).values('created_date').annotate(number=Count('id')) 

(冗長valuesが適切なGROUP BYを生成するのに必要とされているDjangoのドキュメントのaggregation topicを参照してください。)。