注释 Django ORM 查询中唯一对象出现的计数

Annotating count of unique object occurences in Django ORM query

在我的 Django 应用程序中,用户 post 照片保存为 photo 对象。然后观众可以在每张照片下 post 评论,保存为 photocomment 个对象,这些对象在 photo 个对象上有一个外键。

我正在尝试编写一个 ORM 查询,在请求的每个照片对象的位置,我附加了它获得的唯一评论的数量。唯一意味着由唯一 user_id 评论。 IE。如果相同的 guy/girl 评论了 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 评论者。这样做的正确方法是什么?试图绕过它。

模型结构会有所帮助,但这可能有效:

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

你应该使用 Count with order_by。例如

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