Как я могу получить количество объектов для модели в шаблонах Django? - PullRequest
31 голосов
/ 03 августа 2010

Я - мое приложение Django. Я выбираю все объекты для конкретной модели, например:

secs = Sections.objects.filter(order__gt = 5)

Я передаю эти varbiles в свои шаблоны и могу получить доступ ко всем свойствам модели, например:section.name, section.id и т. Д.

Существует модель с именем Books, имеющая FK для модели Sections.Когда я перебираю переменную secs в своем шаблоне, как я могу получить доступ к количеству книг для каждого раздела?Что-то вроде {{ sec.Books.count }} ??

Спасибо

Ответы [ 2 ]

69 голосов
/ 03 августа 2010

Если Books имеет ForeignKey для Sections, тогда Django автоматически создаст обратную связь из Разделов обратно в Книги, которая будет называться books_set.Это менеджер, что означает, что вы можете использовать .filter(), .get() и .count() на нем - и вы можете использовать их в своем шаблоне.

{{ sec.books_set.count }}

(Кстати, вы должны использоватьединственные существительные для имен вашей модели, а не множественного числа - Book вместо Books. Экземпляр этой модели содержит информацию для одной книги, а не для многих.)

10 голосов
/ 04 апреля 2012

В дополнение к тому, что сказал Дэниел, Django создает обратные отношения автоматически (как сказал Дэниел выше), если вы не переопределите их имена аргументом related_name.В вашем конкретном случае у вас будет что-то вроде:

class Book(models.Model):
    section = models.ForeignKey(Section, related_name="books")

Тогда вы сможете получить доступ к количеству книг раздела в шаблоне по:

{{ sec.books.count }}

Как вы указали в своем вопросе.

...