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


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

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

我将这个varbiles传递给我的模板,我可以访问模型的所有属性 section.namesection.id

有一个名为的模型 Books 其中有一个FK Sections 模型。当我迭代了 secs 在我的模板中变量,如何访问每个部分的书籍数量?就像是 {{ sec.Books.count }}??

谢谢


29
2017-08-03 11:05


起源




答案:


如果 Books 有一个ForeignKey Sections然后Django将自动创建一个从Sections返回Books的反向关系,这将被调用 books_set。这是一个经理,这意味着你可以使用 .filter().get() 和 .count() 在它上面 - 您可以在模板中使用它们。

{{ sec.books_set.count }}

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


64
2017-08-03 11:39





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

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

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

{{ sec.books.count }}

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


9
2018-04-04 09:02