如何在Django ORM中从School模型查询关联Student符合条件的实例
问题解决步骤
1. 修正模型关联错误
你的模型定义存在关键问题:Student的外键字段a指向了Vendor,但题目要求School与Student是多对一关系,所以需要将外键改为指向School,建议同时指定related_name便于反向查询:
class School(models.Model): name = models.TextField(default="hello world") class Student(models.Model): key = models.TextField(default="somedata") # 修正外键关联,并指定related_name为students school = models.ForeignKey(School, on_delete=models.CASCADE, related_name="students")
2. 正确的查询写法
如果使用了上述指定的related_name="students",整合后的查询语句如下:
from django.db.models import Q School.objects.filter(Q(name="hello world") | Q(students__key="test"))
如果不指定related_name,Django会使用默认的反向关联名称student_set,此时查询语句为:
School.objects.filter(Q(name="hello world") | Q(student_set__key="test"))
报错原因说明
之前的写法报错有两个核心原因:
- 模型中外键未正确关联
School,导致School与Student之间无合法的反向关联关系; - 即使关联正确,默认反向关联名称是
模型名小写_set,直接写student__key不符合Django的反向查询规则。
内容的提问来源于stack exchange,提问作者paul23
相关产品推荐
相关产品推荐

