我有一个连接2个表的SQL查询,我正在尝试用Django ORM替换它。查询:
SELECT * FROM students r JOIN class_teachers c ON c.class_room_id = r.class_room_id
非常简单。它的目的是从class_teachers表中获取学生和教师ID的所有值。
我创建了3个在db中使用预构建表的模型:
class ClassRoom(models.Model):
class_room = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
class ClassTeachers(models.Model):
class_room = models.ForeignKey(ClassRoom)
teacher = models.ForeignKey(Teachers)
class Students(models.Model):
class_room = models.ForeignKey(ClassRoom)
name = models.CharField(max_length=32)
但是通过这种设置,我无法弄清楚如何像以前一样创建两个表连接。我得到的最接近的是可怕的......但是有效:
dd = ClassTeachers.objects.filter(
company_id=company_id,
).annotate(
name=F('classroom__classteachers__name'),
all_student_fields...
).values(
'teacher_id',
'name',
all_student_fields...
)
并创建一个3表连接:
SELECT st.*, ct.teacher_id
FROM class_teachers ct INNER JOIN class_room cr ON (ct.class_room_id = cr.class_room_id)
LEFT OUTER JOIN students st ON (cr.class_room_id = st.class_room_id)
WHERE ct.class_room_id = '123';
有没有办法创建一个2表连接来获取教师ID和所有学生表字段而无需加入ClassRoom表?