姜戈。如何注释相关模型中的对象计数

问题描述 投票:0回答:2

假设我有一个模型评论和另一个模型答案。我想查询所有评论,但也在查询中包含每个评论的答案数量。我认为

annotate()
在这种情况下会有用,但我只是不知道如何写下来。文档写道:

Django 1.8 中的新功能:以前版本的 Django 只允许聚合 用作注释的函数。现在可以注释 各种表情的模型。

所以。这是我的模型的一个例子:

class Comment(models.Model):
   ...

class Answer(models.Model):
   comment = models.ForeignKey(Comment, related_name='answers')

这是一个示例查询:

queryset = Comment.objects.all().annotate(...?)

我不知道如何注释每个评论的答案

Count
。也就是FK字段上的每个评论有多少个答案指向
comment
。有可能吗?有没有更好的办法?在管理器上写一个方法是不是更好?

python django django-queryset
2个回答
22
投票

您需要使用a

Count
聚合:

from django.db.models import Count
comments = Comments.objects.annotate(num_answers=Count('answers'))

0
投票

更好的解决方案是:

从 django.db.models 导入预取、查询集、计数

def get_queryset(self) -> QuerySet[Customer]:
        return (
            Comments.objects
            .prefetch_related(
                    Prefetch('answers', queryset=Answer.objects.only('id')),
                )
            .annotate(
                answers_count=Count('answers', distinct=True),
            )
            .order_by("-id")
            )

请根据具体场景进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.