繁体   English   中英

给定一个对象的查询集,对于每个对象,我如何找到该对象的ForeignKey的所有对象集?

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

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