単純なメッセージングシステムでのユーザーアクティビティの概要をテンプレートに入力する必要があります。メッセージの送信者ごとに、送信されるメッセージの数と個別の受信者の数が必要です。
モデルの簡略化されたバージョンは次のとおりです。
class Message(models.Model):
sender = models.ForeignKey(User, related_name='messages_from')
recipient = models.ForeignKey(User, related_name='messages_to')
timestamp = models.DateTimeField(auto_now_add=True)
SQLでこれを行う方法は次のとおりです。
SELECT sender_id, COUNT(id), COUNT(DISTINCT recipient_id)
FROM myapp_messages
GROUP BY sender_id;
ORMクエリでの集計に関するドキュメントを読んでいますが、annotate()は最初のCOUNT列を処理できますが、COUNT(DISTINCT)の結果を取得する方法がわかりません(extra(select = {})でも動作していないようですが、動作していません)。これをDjangoORMクエリに変換できますか、それとも生のSQLをそのまま使用する必要がありますか?