在Django(和其它MVC /奥姆斯)延迟加载关系(Lazy loading relationsh

2019-09-17 16:36发布

想知道如何装载慵懒样的Django框架的实现。 当决定做出执行连接? 而且是有办法迫使预先加载在Django? 是不是有时候你需要强制的Django跃跃欲试负荷?

Answer 1:

一般的答案是,Django的使当你真正问一些记录进行查询的决定。 最常见的,这意味着遍历查询集( for record in queryset: )或使用list()内置函数的查询集转换到一个列表。

见当查询集被评估为从官方文档更多的细节。

它通过定义一个类,称为实现这一QuerySetdjango/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)