想知道如何装载慵懒样的Django框架的实现。 当决定做出执行连接? 而且是有办法迫使预先加载在Django? 是不是有时候你需要强制的Django跃跃欲试负荷?
Answer 1:
一般的答案是,Django的使当你真正问一些记录进行查询的决定。 最常见的,这意味着遍历查询集( for record in queryset:
)或使用list()
内置函数的查询集转换到一个列表。
见当查询集被评估为从官方文档更多的细节。
它通过定义一个类,称为实现这一QuerySet
在django/db/models/query.py
,其中类似的特殊方法__repr__
, __getitem__
和__iter__
被编码做正确的事。
如果您需要强制立即加载只需运行内置的查询集Python列表的功能,如:
qs = SomeModel.objects.all()
ql = list(qs)
该调用list()
将执行数据库查询和所有的对象加载到内存中。 它应该是相当罕见的,你需要做到这一点,但一个情况是,当你需要在你的模板使用查询结果在多个地方。 转换列出并通过列表在你的模板上下文将在您的模板的每一个地方,你遍历只有一次,而不是一次执行查询。
文章来源: Lazy loading relationships in Django (and other MVCs/ORMs)