Django - 如何在多对多关系中从中间模型中检索数据?

时间:2011-07-22 20:58:41

标签: django django-models

我在我的应用中设置了以下模型:

  • 课程
  • 学生
  • 评价

课程和学生模型通过评估具有多对多关系。在评估模型中,我还存储了课程收到的费用。我知道我应该将它存储在课程模型中,然后乘以学生人数,但有时无论出于何种原因,学生可能无法支付课程的全部金额,因此我需要在个人基础上对其进行跟踪。 / p>

我正在尝试创建给定时间段内所有课程的列表,并包含一个显示

的列
  1. 课程收到的总金额
  2. 该时段内所有课程的总收入。
  3. 目前,我只是使用通用视图来返回所有课程,我在课程模型中定义了一个简单的方法来计算收到的总费用:

    def total_fee(self):
        evaluations = self.evaluation_set.all()
        total = 0;
        for e in evaluations:
            total += e.fee_paid
    
        return total
    

    但是,我正在运行调试工具栏,这表明当我运行它时,此视图需要87个单独的SQL查询!

    显然,我不是每次都这样做。如何一次性获取所有数据?

    非常感谢任何建议。

    感谢。

1 个答案:

答案 0 :(得分:0)

我想我会亲自使用Django的Aggregation功能解决这个问题。在没有看到你的模型的情况下,我很难概念化你的数据库结构,但我认为这个调用看起来像这样:

from django.db.models import Sum
total = self.evaluation_set.all().aggregate(total=Sum('fee_paid'))['total']

我认为,这应该能够为您提供1次DB呼叫中评估集中所有费用的总和。拿一粒盐,因为我还没有测试过。

希望有所帮助。