“懒惰”是什么?
答:创建QuerySet的动作不涉及任何数据库行为,也就是说就算你写一天的filter,只要你不用它,Django就不会运行这个查询。
例如:
q = Entry.objects.filter(headline__startswith="What")
q = q.filter(pub_date__lte=datetime.date.today())
q = q.exclude(body_text__icontains="food")
print(q)
这个例子看起来有三次数据库操作,但事实上仅仅只有一次,就是最后一行的print(q)。
通常,在你“用”它们之前,不会从数据库中获取QuerySet的结果。
直到你用了,这个QuerySet才会执行,然后才会访问数据库。