Django - 获取通用列表视图中的总列数

时间:2011-07-25 18:04:08

标签: django

我正在使用自定义查询集中的列表视图来显示记录列表。我要检索的其中一列是十进制字段。我想获取检索到的所有行的该列的总值。

据推测,我需要在ListView类的get_context_data中执行此操作,但我不确定如何解决它。如果我尝试在此内执行查询集的计算 方法,我最终不会两次执行查询吗?

我的查询并不完全适合我的模型架构,而我想要执行计算的字段本身是按行计算的。

return Lesson.objects.select_related().filter(user=self.request.user).extra(select={'total_fee' : 'SELECT SUM(fee_paid) FROM lessons_evaluation WHERE lessons_evaluation.lesson_id=lessons_lesson.id GROUP BY lessons_evaluation.lesson_id', 'desc' : 'SELECT CASE WHEN COUNT(lessons_evaluation.id) = 0 THEN "None Set" WHEN COUNT(lessons_evaluation.id) = 1 THEN GROUP_CONCAT(CONCAT(lessons_student.first_name, " ", lessons_student.last_name)) ELSE CONCAT(COUNT(lessons_evaluation.id), " students") END FROM lessons_evaluation, lessons_student WHERE lessons_evaluation.lesson_id=lessons_lesson.id AND lessons_evaluation.student_id = lessons_student.id GROUP BY lessons_evaluation.lesson_id'})

编辑:

课程通过中介评估模型与学生有多对多的关系。

任何建议表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

我建议使用aggregation功能在数据库服务器上执行此处理。理想情况下,您的网络服务器应尽可能轻,因为您的数据库服务器已经过优化以执行这些类型的操作,并且b)更有可能拥有更好的硬件,从而加快计算时间。

编辑:这可能有两个数据库命中,是的,但是在数据库服务器上进行计算可能比在python中对查询集进行迭代和求和更快。