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

Ale*_*lla 4 python django django-queryset

假设我有一个模型评论和另一个模型答案。我想查询所有评论,但还要在查询中包含每个评论的答案数量。我认为annotate()在这种情况下会很有用,但我只是不知道如何写下来。文档写道:

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

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

class Comments(models.Model):
   ...

class Answers(models.Model):
   comment = models.ForeignKey(Comments)
Run Code Online (Sandbox Code Playgroud)

这是一个示例查询:

queryset = Comments.objects.all().annotate(...?)
Run Code Online (Sandbox Code Playgroud)

我不确定如何注释Count每个评论的答案。即有多少答案指向 FK 字段上的每个评论comment。甚至有可能吗?有没有更好的办法?只在 manager 上写一个方法会更好吗?

小智 8

你需要使用一个Count聚集

from django.db.models import Count
comments = Comments.objects.annotate(num_answers=Count('answers'))
Run Code Online (Sandbox Code Playgroud)

  • 感谢你的回答。额外注意:我必须在我的 FK 中添加一个 `lated_name` 才能使其正常工作。以防万一有人发现这很有用。 (3认同)