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

时间:2016-11-30 14:02:46

标签: django django-queryset django-orm

在我的Django应用中,用户发布保存为photo个对象的照片。然后,观看者可以在每张照片下发布评论,保存为在photocomment个对象上具有外键的photo个对象。

我正在尝试编写一个ORM查询请求每个照片对象的位置,我附加了它所获得的唯一注释的数量。唯一意味着由唯一user_id发表评论。即如果同一个人/女孩评论了1000次,它仍然是一个独特的评论。

我如何做到这一点?

到目前为止,我已经提出以下建议:

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评论者。这样做的正确方法是什么?试图绕过它。

2 个答案:

答案 0 :(得分: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)
   ...

答案 1 :(得分:1)

您应该将Countorder_by一起使用。例如

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