Mri*_*lla 34 python django django-models
我是我的Django应用程序我正在获取特定模型的所有对象,如下所示:
secs = Sections.objects.filter(order__gt = 5)
Run Code Online (Sandbox Code Playgroud)
我通过这个varbiles到我的模板,我可以访问模型像所有的属性section.name,section.id等等.
有一个叫模型Books具有FK的Sections模型.当我secs在模板中迭代varible时,如何访问每个Section的Books数?有点喜欢{{ sec.Books.count }}?
谢谢
Dan*_*man 71
如果Books有一个ForeignKey Sections,那么Django会自动创建一个从Sections返回Books的反向关系,这将被调用books_set.这是一个经理,这意味着你可以使用.filter(),.get()并且.count()它-你可以在你的模板中使用这些.
{{ sec.books_set.count }}
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,你应该使用单数名词作为你的模型名称,而不是复数 - Book而不是Books.该模型的一个实例保存一本书的信息,而不是很多.)
Mbu*_*uso 10
除了Daniel所说的,Django会自动创建反向关系(如Daniel所述),除非您使用related_name参数覆盖其名称.在你的特定情况下,你会有类似的东西:
class Book(models.Model):
section = models.ForeignKey(Section, related_name="books")
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式访问模板中的部分书籍计数:
{{ sec.books.count }}
Run Code Online (Sandbox Code Playgroud)
正如你在问题中暗示的那样.
至于2019年的答案。我建议related_name在使您ForeignKey看起来像这样的同时使用:
section = models.ForeignKey(Section, on_delete=models.SET_NULL, related_name='books')
Run Code Online (Sandbox Code Playgroud)
然后您可以按如下方式使用它:
{{ section.books.count }}
Run Code Online (Sandbox Code Playgroud)
或者
{{ section.books|length }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45822 次 |
| 最近记录: |