繁体   English   中英

Django使用外键进行多个查询

[英]Django multiple queries with foreign keys

假设我有两个不同的应用程序:

teacher/models.py:

  Teacher(models.Model):
     name = models.CharField(max_length=300)


class/models.py:

  Class(models.Model):
     name = models.CharField(max_length=300)
     teacher = models.ForeignKey(Teacher)
     students = models.ManyToManyField(Student)

我想让所有带班授课的老师和所有班级都附上。

我想要的结果:

{[
   teacher: '3L' #Teachers Id
   classes: ['20L','14L','30L'] #list of Class objects or ids with the above teacher
],
[# similar to above]

}

这可能吗? 这是我目前正在做的:

classes = Class.objects.all()
teachers = Teacher.objects.filter(id__in=classes.value_list('teacher',flat=True).distinct())
for teacher in teachers:
    classes_for_teachers = classes.objects.filter(teacher=teacher)

在上面的代码中,使用循环进行了四个查询,这肯定会增加时间复杂度。 有更好的解决方案吗? 提前致谢。

使用prefetch_related

teachers = Teacher.objects.prefetch_related('class_set')

# what you want is not a valid Python structure (set of lists (looking like dicts))
# list of dicts makes more sense
result = [
    {'teacher': t.pk, 'classes': t.class_set.all()}
    for t in teachers
]

无论有多少老师和班级,这只会触发2个数据库查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM