【问题标题】:Annotating count of unique object occurences in Django ORM query注释 Django ORM 查询中唯一对象出现的计数
【发布时间】:2017-04-14 21:28:00
【问题描述】:

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

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

【问题讨论】:

    标签: django django-queryset django-orm


    【解决方案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)
       ...
    

    【讨论】:

      【解决方案2】:

      您应该使用Countorder_by。例如

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

      【讨论】:

        猜你喜欢
        • 2018-04-11
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 2020-01-26
        • 2018-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多