>假设我有 3 个模型,它们是A
B
和C
的,还有一个像这样的 views.py:
def blahblah(request):
a = A.objects.all(),
b = B.objects.all(),
c = C.objects.all(),
context = {
a = a,
b = b,
c = c,
}
return render(request, template, context)
我听说查询集很懒惰,所以在我们使用它之前它不会命中数据库。问题是,如果我有一个模板只使用像这样的a
{{ a }}
而不使用b
或c
,我们命中数据库多少次?将查询集放在上下文中而不在模板上使用它是否会触发查询集?谢谢,对不起我的英语不好。
只有一次。 如果您实际上没有从b
或c
中检索任何结果,则不会命中数据库。
通常,在模板中,当您使用 for 循环从查询集中提取各个项目时,或者运行其他方法(如 count
. 但是假设你的模板只说{{a }},那么实际上只会从数据库中查询a
,尽管如果你使用all
而不是get
,这有点奇怪。
我还应该补充一点,您可以使用调试工具栏来实际查看执行了哪些查询。