我有4个模型。比如说:
Modal BigBox:
small_boxes = ManyToMany
.....
Model SmallBox
.....
Model Item
.....
Model Big_box_small_box_items:
big_box = fk(BigBox)
small_box = fk(SmallBox)
Item = fk(Item)
.....
字符串
在我的模板中,我想去一个大盒子的模板,看到每个小盒子中的项目列表。我现在有一个工作页面,但它涉及到视图内的嵌套逻辑丢失和数据库命中的效率低下。
我的头是游泳有点作为一个爱好者,我会很感激任何指点。
2条答案
按热度按时间wb1gzix01#
我最终在我的视图中创建了一个列表,并将数据库命中数从85减少到10。
当给你一个大盒子的时候。
字符串
然后在模板中...
型
biswetbf2#
在您的模板中,您应该能够执行以下操作:
字符串
类似的问题:https://stackoverflow.com/a/40569127/4872140
请注意,对于多对多,您在smallbox上不使用
_set
,因为您将用于正常的外键关系。错误:(不要这样做)
型
在Django模板语言文档中有一些关于如何使用/为什么.all方法调用工作的讨论。更具体地说,关于ManyToMany处理。
编辑:阅读了你的评论后,我看到你有一个与我最初读到的略有不同的问题。我认为你可能需要在外部循环的内部添加另一个循环。由于帖子中模型中缺少细节,这里有点坚韧。我建议您将
Big_box_small_box_items
重命名为BigBoxSmallBoxItems
,并将字段从Item
重命名为item
。检查编码风格并坚持使用它,以保存以后遇到麻烦(https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/#model-style)型
我怀疑这是否会优化您的查询,并且您可能最终会保留所获得的内容。根据您已经在视图中看到的内容,您可能希望查看
prefetch_related
工具(https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related)