简体   繁体   中英

Django. How to annotate a object count from a related model

lets say I have a model Comments and another model Answers. I want to query all comments but also include in the query the number of answers each comment has. I thought annotate() would be useful in this case, but I just don't know how to write it down. The docs write that:

New in Django 1.8: Previous versions of Django only allowed aggregate functions to be used as annotations. It is now possible to annotate a model with all kinds of expressions.

So. This is an example of my models:

class Comments(models.Model):
   ...

class Answers(models.Model):
   comment = models.ForeignKey(Comments)

And this is an example query:

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

I'm not sure how to annotate the Count of answers each comment has. That is, how many answers point to each comment on the FK field comment . Is it even possible? is there a better way? Is it better to just write a method on the manager?

You need to use a Count aggregation :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM