Джанго подсчитывает вложенные объекты m2m - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть 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 объекты и показать количество entries для каждого b в A, наряду с другими полями в A.Какой самый эффективный способ сделать это?

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете сделать это за 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)
...