假设我有一个模型评论和另一个模型答案。我想查询所有评论,但也在查询中包含每个评论的答案数量。我认为
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
。有可能吗?有没有更好的办法?在管理器上写一个方法是不是更好?
更好的解决方案是:
从 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")
)
请根据具体场景进行调整。