0

假设我有 3 个模型,它们是A BCview.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 }}而不使用bor的模板,c我们访问数据库多少次?将查询集放在上下文中而不在模板上使用它会触发查询集吗?谢谢,对不起我的英语不好。

4

1 回答 1

3

就一次。如果您实际上没有从bor检索任何结果c,则不会命中数据库。

通常,在模板中,当您使用 for 循环从查询集中提取单个项目时,或者如果您运行其他方法(如count. 但是假设您的模板只说 {{ a }},那么a实际上只会从数据库中查询,尽管如果您使用的是all,而不是get.

我还应该补充一点,您可以使用调试工具栏来实际查看执行了哪些查询。

于 2012-12-05T09:39:05.127 回答