我是我的Django应用程序我正在获取特定模型的所有对象,如下所示:
secs = Sections.objects.filter(order__gt = 5)
我将此varbiles传递给我的模板,我可以访问模型的所有属性,如section.name
,section.id
等。
有一个名为Books
的模型,它具有Sections
模型的FK。当我遍历模板中的secs
变量时,如何访问每个部分的书籍数量?像{{ sec.Books.count }}
??
谢谢
答案 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)