只是想知道Django 2.2 ORM是否在此代码中缓存了返回的QuerySet,还是针对每个调用在数据库上执行了查询?有没有一种方法可以告诉Django“重用” QuerySet从而对数据库产生影响。
我正在构建此应用程序,该应用程序会出于不同的原因而检索多个值和对象,但是每种情况下的基础查询都是相同的。
hrs = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('duration'))['sum'] / 60
stf = Sale.objects.filter(createdate = dte).values_list('idsalestaff', flat=True).distinct().count()
csh = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('cash'))['sum']
crd = Sale.objects.filter(createdate = dte).aggregate(sum=Sum('card'))['sum']
答案 0 :(得分:0)
所有查询集在 Django 中都是惰性的,因此在您从查询集中将数据获取到应用程序之前,它们实际上都不会执行(例如,使用for
循环)
您可以进行查询并对其应用更多查询(hrs.filter(createdate=dte)
),但是它仍然很懒,因此您还没有访问数据库。
您可以通过one of these methods强制执行查询。