访问嵌套外键对象的正确方法是什么?

时间:2018-06-11 09:02:52

标签: python django foreign-keys

我的模型具有层次关系:

class School(models.Model):
    name = models.CharField()

class Class(models.Model):
    school = models.ForeignKey(School)

class Student(models.Model):
    class = models.ForeignKey(Class)

我想检索与某些Student相关的每个School个对象。
我通常会这样做:

the_school = School.objects.get(name='Springfield Elementary School')
students = Student.objects.filter(class__school=the_school)

但是这个方法需要两个模型来查找(SchoolStudent),这似乎有点不必要......对我而言。
所以我尝试使用Django内置的相关管理器进行单行查询:

students = School.objects.get(name='...').class_set.student_set.all()
# or 
students = School.objects.get(name='...').class_set.all().student_set.all()

......哪些不起作用。

如何从给定的School对象中查询引用查询?
或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以使用class__school__name作为过滤器参数:

students = Student.objects.filter(class__school__name='Springfield Elementary School''Springfield Elementary School')