是可以优化的Django不运行这么多疑问的是这样的Django的优化查询与循环
for student in Student.objects.all():
for course in student.course_set.all():
for grade in course.grade_set.filter(student=student):
# do stuff
的查询量是学生的课程* *等级可以得到巨大的。
*编辑 从roseman的博客获得一些想法后的一种可能性。
for grade in student.grade_set.order_by('course', 'marking_period').select_related():
if grade.marking_period_id in some_report_input:
# do stuff
这只是一个片段,但基本上我换成for循环只有一个为我在乎(等级)等级的最后一个项目环有我需要的一切(学生,当然,标记时段)引用。使用诸如marking_period_id而不是grade.marking_period(做另一个查询)是关键。
折衷是代码可读性。我想筛选出成绩并根据标准进行组织。这从琐碎到复杂。
这绝不是一个通用的解决方案。我敢肯定,有些时候这根本无济于事。如果你知道更好的方法,请评论。
又如:
for student in students:
print student
for department in departments:
print department
failed_grades = Grade.objects.filter(course__department=department,course__courseenrollment__user=student,grade__lte=70)
for failed_grade in failed_grades:
print grade.course
print grade.grade
学生获取课程就读。一门课程有一个部门。
此处添加您的机型,所以我们可以了解他们是如何相互连接 – marianobianchi 2012-06-09 01:57:31