django中的惰性查询集

时间:2019-06-29 11:35:53

标签: python django

这更多是效率问题。我的django网页工作正常,从某种意义上说我没有收到任何错误,但是速度非常慢。话虽这么说,除了这里,我不知道还要问什么,所以去了:

我正在开发销售仪表板。为此,我要反复访问相同的数据,并希望加快速度。

例如,我的一项指标是赢得的机会数量。这将访问我的机会模型,对过去X天内赢得的机会进行分类并进行报告。

另一个度量标准是被忽略的机会。也就是说,仍然报告了正在处理的机会,但是已经有Y天没有活动了。该指标还访问了我的机会模型。

我读到VeraPDF project时说查询集是惰性的,如果我正确理解这个概念,那将意味着我的实际数据库只能在最后访问。通常,这是一个理想的情况,因为所有筛选器都已安装到位,并且查询集仅访问少量信息。

目前,我对每个指标都有单独的功能。因此,对于上面的示例,我有compile_won_opportunities和compile_neglected_opportunities。每个函数都以类似以下内容开头:

won_opportunities_query = Opportunities.objects.all()

,然后从那里过滤掉它。如果我正确阅读了文档,则意味着我要多次访问同一数据库。

我的网页加载时有明显的滞后。为了找出导致延迟的原因,我注释了代码的不同部分。当我注释掉访问每个功能数据库的代码时,我的网页将立即加载。我最初的想法是在调用函数中访问数据库:

opportunities_query = Opportunities.objects.all()

,然后将该查询传递给使用该查询的每个函数。我的理由是数据库只能被访问一次,但是django显然不能那样工作,因为它对我的页面加载时间没有明显的影响。那么,经过我冗长的解释之后,如何才能加快页面加载时间?

1 个答案:

答案 0 :(得分:0)

  

如果我正确阅读了文档,则意味着我要多次访问同一数据库。

https://pypi.org/project/django-debug-toolbar/

顺便说一句,请继续使用此https://docs.djangoproject.com/en/2.2/ref/models/querysets/#select-related