1

日付によるグループ化で注釈を付けようとしているdatetimefieldを持つモデルがあります。

例えば:

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'))

上記の問題は、日付だけでなく、日時フィールドの1秒/ミリ秒ごとにグループ化されることです。

どうすればいいですか?

4

2 に答える 2

2

QuerySet.extraを使用してこれを解決し、クエリに列を追加できるはずです。

例えば。

qs.filter(...).extra(select={'created_date': 'created::date'}).values('created_date')
于 2012-04-18T06:46:00.243 に答える
1

Django 1.8以降では、新しいDateTime式を使用することもできます(奇妙なことに、組み込みの式シートには記載されていません)。

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(適切なものを生成するには冗長性が必要です。Djangoドキュメントの集計トピックGROUP BYを参照してください)。

于 2015-09-30T17:25:17.947 に答える