DateTimeフィールドから登録した日付を数えようとしています。データベースでは、これは '2016-10-31 20:49:38'として保存されますが、私は'2016-10-31 'の日付にのみ興味があります。日時からDjangoカウントグループ
生のSQLクエリは次のとおりです。
select DATE(registered_at) registered_date,count(registered_at) from User
where course='Course 1' group by registered_date;
それは「余分」を使用して可能であるが、私はこれが廃止されて読んだと行うべきではありません。これは、このかかわらず、次のように動作します。
User.objects.all()
.filter(course='Course 1')
.extra(select={'registered_date': "DATE(registered_at)"})
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
はそれが余分を使用せずに行うことは可能ですか?
私はTruncDateを使用することができることを読んで、私は、これはしかし、それは動作しません正しいクエリセットであると思う:
User.objects.all()
.filter(course='Course 1')
.annotate(registered_date=TruncDate('registered_at'))
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
私は<QuerySet [{'total': 508346, 'registered_date': None}]>
を取得するので、TruncDateと間違って行くものがあります。
誰かが私よりもこのことを良く理解しており、正しい方向に向けることができればそれは大いに感謝します。
ありがとうございました。
from django.db.models import Count
User.objects.values_list('registered_at')\
.filter(course=1)\
.annotate(count_user=Count('registered_at'))\
で
私はちょうど余分なものを使います、これはまさにそれが作られたものです。現在のところ、このような問題の唯一の選択肢であるため、いつでもすぐに代替ソリューションを提供する必要はありません。だから私はそれについて心配しないだろう。 – serg