[英]Given a queryset of objects, for each one, how can I find the set of all objects that ForeignKey to that object?
我有:
class Teacher(models.Model):
name = models.CharField(...)
...
class Student(models.Model):
age = models.IntegerField(...)
teacher = models.ForeignKey(Teacher, ...)
...
我有一个教师查询集:
teachers = Teacher.objects.filter(name="Betty")
我想在该查询集中找到与每位老师相关的所有学生,并且我需要将结果按老师分组。 就像是:
{
<Teacher: 1>: [<Student: 1>, <Student: 2>],
<Teacher: 2>: [<Student: 3>, <Student: 4>]
}
我可以通过仅遍历teachers
集中的每个对象,并过滤学生对该教师的ForeignKey的学生来实现此目的,但这似乎确实很慢,并且需要为每个对象进行额外的数据库调用。 有什么方法可以在一个或几个数据库调用中完成此任务,理想的情况是仅使用Python而不使用SQL?
我很确定这就是select_related和prefetch_related的重点 。 这是select_related
的说明:
返回一个QuerySet,它将“遵循”外键关系,并在执行查询时选择其他相关对象数据。 这可以提高性能,从而导致单个更复杂的查询,但意味着以后使用外键关系将不需要数据库查询。
因此,您将执行以下操作:
teachers = Teacher.objects.filter(name="betty").prefetch_related("student_set") # student_set OR whatever is in your related_name field
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.