Django计算嵌套的M2M对象

时间:2019-04-10 04:54:49

标签: django django-models django-queryset

我有3个模型-

class A(models.Model):
    ...
    b = models.ManyToManyField(B, related_name="related_a")

class B(models.Model):
    ...

class Entries(models.Model):
    ...
    b = models.ForeignKey(B, related_name="entries")

我需要遍历所有A对象,并显示A中每个entries的{​​{1}}计数以及A中的其他字段。最有效的方法是这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以通过2个查询完成此操作:

from django.db.models import Count, Prefetch

qs = B.objects.annotate(entry_count=Count('entries'))
a_list = A.objects.prefetch_related(Prefetch('b', queryset=qs))

我希望所有相关名称正确。您可以像这样访问计数:

for a in a_list:
    for b_item in a.b:
        print(b_item.entry_count)