Как посчитать количество объектов в данном внешнем ключе в django внутри шаблона html? - PullRequest
1 голос
/ 24 апреля 2020

У меня есть 3 модели:

class Category(models.Model):
  name = models.CharField(max_length=100)

class Subcategory(models.Model):
  name = models.CharField(max_length=100)
  category = models.ForeignKey(Category, on_delete=models.CASCADE)

class Item(models.Model):
  name = models.CharField(max_length=100)
  subcategory = models.ForeignKey(Subcategory, on_delete=models.CASCADE)

В моем шаблоне Html я хочу получить доступ к количеству элементов в каждой категории. Я пытался использовать метод _set, но он не работает на category.subcategory_set.course_set.count. Как я могу получить доступ к количеству курсов в каждой категории. Я не включил категорию в качестве внешнего ключа в мои модели элементов, поскольку это может привести к присвоению неправильной пары категория-подкатегория для элемента.

1 Ответ

1 голос
/ 24 апреля 2020

Пожалуйста, не делайте этого в шаблоне. Язык интерфейса Django намеренно ограничен, чтобы люди не могли писать бизнес-логи c в шаблоне. Более того, даже если бы это было возможно, это было бы неэффективно из-за проблемы N + 1 .

Вы можете посчитать количество элементов в категории, определив набор запросов:

from django.db.models import Count

Category.objects.annotate(
    <b>num_items=Count('subcategory__item')</b>
)

Объекты Category, которые возникают из этого набора запросов, будут иметь дополнительный атрибут .num_items, который содержит общее количество элементов, связанных с Subcategory, связанным с , которые Category.

...