Django Queryset基于父级的父级过滤:跨多层外键查询Student
当然可以实现!
完全没问题,Django ORM的跨关联查询能力刚好能搞定这个需求。咱们先理清楚你的模型关联链:Student → 外键关联Course,Course → 外键关联Teacher,相当于Student和Teacher是间接的一对多关系(一个老师对应多个课程,每个课程对应多个学生)。
要基于Teacher查询Student的QuerySet,只需要用Django ORM的**双下划线(__)**语法来跨关联层级就行,具体写法分两种场景:
已知具体的Teacher对象:
假设你已经拿到了一个teacher_obj,要查这个老师带的所有学生,可以这么写:Student.objects.filter(course__teacher=teacher_obj)按Teacher的字段条件查询:
如果是通过老师的属性(比如姓名、ID)来筛选学生,直接继续用双下划线深入就行,比如找姓名为"李老师"的所有学生:Student.objects.filter(course__teacher__name="李老师")
额外小提示
如果查询后需要用到关联的Course或Teacher数据,建议加上select_related或prefetch_related来优化数据库查询性能,避免N+1查询问题:
# 一次性预取关联的Course和Teacher数据 Student.objects.filter(course__teacher=teacher_obj).select_related('course').prefetch_related('course__teacher')
内容的提问来源于stack exchange,提问作者Michael Sun
相关产品推荐
相关产品推荐

