[英]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.