注释 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)
...
PhotoComment.objects.annotate(count=Count("submitted_by", distinct=True)).order_by("submitted_by")
在我的 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)
...
PhotoComment.objects.annotate(count=Count("submitted_by", distinct=True)).order_by("submitted_by")