django queryset懒散与模板上下文

django queryset懒散与模板上下文,django,django-queryset,Django,Django Queryset,假设我有3个模型,分别是AB和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) 我听说queryse

假设我有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)

我听说queryset是懒惰的,所以在我们使用它之前它不会访问数据库。问题是,如果我有一个模板,它只使用
a
像这样
{{a}}
而不使用
b
c
,我们访问数据库多少次?将查询集放在上下文上而不在模板上使用是否会触发查询集?谢谢你,抱歉我的英语不好。

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

通常,在模板中,当使用for循环从查询集中提取单个项时,或者如果运行其他方法(如
count
)时,可能会发生这种情况。但是假设您的模板只显示{{a},那么实际上只有
a
会从数据库中查询,尽管如果您使用
all
,而不是
get
,这样做有点奇怪


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

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

通常,在模板中,当使用for循环从查询集中提取单个项时,或者如果运行其他方法(如
count
)时,可能会发生这种情况。但是假设您的模板只显示{{a},那么实际上只有
a
会从数据库中查询,尽管如果您使用
all
,而不是
get
,这样做有点奇怪

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