如何在Django模板中获取模型的对象数?

时间:2010-08-03 11:05:23

标签: python django django-models

我是我的Django应用程序我正在获取特定模型的所有对象,如下所示:

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

我将此varbiles传递给我的模板,我可以访问模型的所有属性,如section.namesection.id等。

有一个名为Books的模型,它具有Sections模型的FK。当我遍历模板中的secs变量时,如何访问每个部分的书籍数量?像{{ sec.Books.count }} ??

这样的东西

谢谢

4 个答案:

答案 0 :(得分:68)

如果Books有一个ForeignKey到Sections,那么Django会自动创建一个从Sections返回Books的反向关系,这将被称为books_set。这是一个管理员,这意味着您可以在其上使用.filter().get().count() - 您可以在模板中使用这些。

{{ sec.books_set.count }}

(顺便说一句,你应该使用单数名词作为你的模型名,而不是复数 - Book而不是Books。该模型的一个实例保存一本书的信息,而不是很多。)< / p>

答案 1 :(得分:10)

除了Daniel所说的,Django自动创建反向关系(如Daniel所述),除非你用related_name参数覆盖它们的名字。在你的特定情况下,你会有类似的东西:

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

然后,您可以通过以下方式访问模板中的部分图书计数:

{{ sec.books.count }}

正如你在问题中所暗示的那样。

答案 2 :(得分:0)

关于 2019 的答案。我建议在使您的related_name看起来像这样的同时使用ForeignKey

section = models.ForeignKey(Section, on_delete=models.SET_NULL, related_name='books')

然后您可以按以下方式使用它:

{{ section.books.count }} 

{{ section.books|length }}

答案 3 :(得分:0)

对于 Django 3.0,如果 Book 模型与 Section 模型相关,

{{ sec.books_set.all.count }}

工作已经在@ColumnInfo

中提到