2016-11-30 2 views
0

私のDjangoアプリケーションでは、ユーザーはphotoオブジェクトとして保存された写真を投稿します。閲覧者は、photocommentとして保存された各写真の下にコメントを投稿し、photoオブジェクトに外部キーを持つことができます。Django ORMクエリの一意のオブジェクト発生数の注釈

私はORMクエリーを作成しようとしています。リクエストされた各写真オブジェクトには、獲得したユニークなコメントの数が追加されます。ユニークは、ユニークなコメントを意味しますuser_id。私。同じ男/女の子が1000回コメントした場合、それはまだ1つのユニークなコメントです。

どのように達成できますか?


これまでのところ、私は次のように作ってみた:

relevant_photos = Photo.objects.filter(id=set_of_ids) 
PhotoComment.objects.filter(which_photo_id__in=relevant_photos).annotate(unique_comment_count=Count("submitted_by")).distinct("submitted_by") 

私は、私は本当にここdistinctコメンターを数えていないよので、これが動作することはできません感じています。これを行う正しい方法は何でしょうか?私の頭をそれのまわりで包み込むことを試みている。

答えて

1

あなたはorder_byCountを使用する必要があります。例えば、

PhotoComment.objects.annotate(count=Count("submitted_by", disntict=True)).order_by("submitted_by") 
1

モデル構造は役立ちますが、これはよい作品:このような

relevant_photos = Photo.objects.filter(id=set_of_ids) 
PhotoComment.objects.filter(which_photo_id__in=relevant_photos).annotate(unique_comment_count=Count("submitted_by", distinct=True)) 

なのでコメントモデル何か:

class Comment(models.Model): 
    ... 
    submitted_by = models.ForeignKey(User) 
    ... 
関連する問題