Python 联接表上的Django计数
我有一个多对多的关系,需要在Django和另一个专栏中计算,例如Python 联接表上的Django计数,python,django,Python,Django,我有一个多对多的关系,需要在Django和另一个专栏中计算,例如 Student: ID Name Lessons Lesson: ID Name Date Type Students 所以现在一个学生有很多课,一节课有很多学生,如果我做一个查询,它会告诉我: 按月计算,该月内所有课程的学生总数,并按课程类型划分 所以它会说: January: Maths: 3 lessons, 20 students English 3 lessons, 3
Student:
ID
Name
Lessons
Lesson:
ID
Name
Date
Type
Students
所以现在一个学生有很多课,一节课有很多学生,如果我做一个查询,它会告诉我:
按月计算,该月内所有课程的学生总数,并按课程类型划分
所以它会说:
January:
Maths: 3 lessons, 20 students
English 3 lessons, 30 students
到目前为止,这就是我所拥有的
l = Lessons.objects.extra({'month':truncate_date})
l = l.values('lesson_type', 'month'
).order_by(
).annotate(Count('lesson_type')
).order_by('lesson_date'
).annotate(students=Count('students'))
问题是,当我只计算课程数量时,我得到了正确的值,但当我同时计算两者时,学生数量和课程数量是相同的,因为加入了。有没有一种方法可以使用子查询来计算第二列
更好的例子:
January:
Lesson 1:
Type: Math
Students: 10
Lesson 2:
Type: Math
Students: 3
Lesson 3:
Type: Math
Students: 7
Lesson 4:
Type: English
Students: 13
Lesson 5:
Type: English
Students: 7
February:
Lesson 1:
Type: Math
Students: 10
Lesson 2:
Type: Math
Students: 3
Lesson 3:
Type: English
Students: 7
Lesson 4:
Type: English
Students: 13
Lesson 5:
Type: English
Students: 7
所以输出应该是
January:
Maths: 3 lessons, 20 students
English: 2 lessons, 20 students
February:
Maths: 2 lessons, 13 students
English: 3 lessons, 27 students
我只想指出,输出只是一个示例,我不需要这样,只需要这些信息可用。并将它们除以课程类型??是的,准确地说,每个月你会有一节课上多少次,有多少学生去上那节课,比如说一个月有20个人去上一节数学课,一个月有3节课。如果三节课上有20个学生,而不是3节课,那么60个学生-期望的输出是3节课,20名学生。不,不只是总数,所以X课X学生,课程可以有任意数量的学生,所以第1课有10名学生,第2课有3名学生,第3课有7名学生,它将显示3课20名学生。我在那里编辑了问题,以便给出更好的想法