加入2个没有ForeignKey链接的表

时间:2018-03-07 04:34:36

标签: django postgresql django-models foreign-keys django-orm

我有一个连接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表?

0 个答案:

没有答案