2017-05-23 4 views
0

私のモデルは、このようになりますどのように日付と合計2つのその他のフィールドでクエリをGROUP_BYする

class PostMetric(models.Model): 
    likes = models.IntegerField() 
    comments = models.IntegerField() 
    created_at = models.DateTimeField(auto_now_add=True) 

私は(毎日のために同類とコメントの合計を取得したいと思い、私は変換する必要があることに注意してください日付フィールドにDateTimeField型(?おそらく、キャストを使用して):

date  engagement (likes+comments) 
2/5/2017   26 
3/5/2017   29 

は、私が使用してみました:キャストは、注釈を付け、集計、さらにはrawsql、余分な/選択機能をしかし、誰成功し

を、私は私がする必要があると思います。このクエリに基づく集計を追加します。

PostMetric.annotate(engagement=Sum('likes') + Sum('comments')).annotate(date_only=Cast('created_at', DateField())) 
+0

e4c5 @ – e4c5

+0

をあなたの最高のショットをしてくださいポスト:私はこの[ドキュメント](https://docs.djangoproject.com/en/1.10/topics/db/aggregation/を)読ん –

+0

私のポストを編集しました@あなたの提案はGahanですが、この記事を読む前に尋ねることはありません – Gahan

答えて

1

あなたはGROUP_BYクエリをエミュレートしたい場合、あなたは.valuesメソッドを使用することができます。

PostMetric.objects.values('created_at').annotate(engagement=Count('likes')+Count('comments') 
+1

ありがとう、私はこれを使っています: 'PostMetric.objects.filter(my_filter).annotate(date_only = TruncDay( 'created_at'))。values( 'date_only ')。annotate(エンゲージメント=合計(' likes ')+合計(' comments ')) ' –

関連する問題