擅长:python、mysql、java
<p><code>get_all_awards</code>不一定要调用<code>get_total_awards</code>。您对每个实体重复相同的查询,而不是使用Django已经提供的功能:<code>annotate</code>。在</p>
<p>您可以修改<code>get_all_awards</code>以使用<code>annotate</code>,并仅当奖励适用于单个实体时使用<code>get_total_awards</code>。在</p>
<pre><code>def get_all_awards():
qs = AwardHolder.objects.annotate(sum=Sum('award__units_awarded'))
awards = []
for ah in qs:
awards.append((ah, ah.sum))
return awards
</code></pre>
<p>您甚至可以删除<code>for</code>循环,直接使用查询集<code>qs</code>的结果。在</p>
<p>因此,在获取多个对象及其相关对象时,可以获得优化查询的优势,而不是为每个实体运行单独的查询。在</p>