У меня есть 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. Как это сделать наиболее эффективно?
Вы можете сделать это в 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)
Я думал сделать то же самое. Спасибо за подтверждение :)