假设我们有这些模型:
class ClassRoom(models.Model):
name = models.CharField(max_length=255)
class Student(models.Model):
name = models.CharField(max_length=255)
classroom = models.ForeignKey(ClassRoom......
class Course(models.Model):
name = models.CharField(max_length=255)
class Grades(models.Model):
student = models.ForeignKey(Student....
course = models.ForeignKey(Course....
grade = models.CharField(.....
我想创建课程和学生的交叉连接,但成绩在表中。
| | Student A | Student B |
| Course 1 | 8 | |
| Course 2 | 6 | 4 |
请注意,学生 B 尚未获得课程 1 的成绩!
我目前像这样解决这个问题
query = list(product(courses, students)
grades = Grades.objects.all.....
for i, query_tuple in enumerate(query):
grade = grades.filter(query_tuple[0], query_tuple[1]
if grade: # Note 1
# Here I add it to a list of the grades
但是在“# Note 1”处,它每次都会运行一个查询,这会大大降低性能(一个班级最多可以有 30 名学生,每门课程超过 50 门)。
有一个更好的方法吗?也许更多的是 Django-ORM 风格?