我在我的应用中设置了以下模型:
课程和学生模型通过评估具有多对多关系。在评估模型中,我还存储了课程收到的费用。我知道我应该将它存储在课程模型中,然后乘以学生人数,但有时无论出于何种原因,学生可能无法支付课程的全部金额,因此我需要在个人基础上对其进行跟踪。 / p>
我正在尝试创建给定时间段内所有课程的列表,并包含一个显示
的列目前,我只是使用通用视图来返回所有课程,我在课程模型中定义了一个简单的方法来计算收到的总费用:
def total_fee(self):
evaluations = self.evaluation_set.all()
total = 0;
for e in evaluations:
total += e.fee_paid
return total
但是,我正在运行调试工具栏,这表明当我运行它时,此视图需要87个单独的SQL查询!
显然,我不是每次都这样做。如何一次性获取所有数据?
非常感谢任何建议。
感谢。
答案 0 :(得分:0)
我想我会亲自使用Django的Aggregation功能解决这个问题。在没有看到你的模型的情况下,我很难概念化你的数据库结构,但我认为这个调用看起来像这样:
from django.db.models import Sum
total = self.evaluation_set.all().aggregate(total=Sum('fee_paid'))['total']
我认为,这应该能够为您提供1次DB呼叫中评估集中所有费用的总和。拿一粒盐,因为我还没有测试过。
希望有所帮助。