在 Django 中连接三个表的 ORM 语法是什么?

Which ORM syntax to join three tables in Django?

我的 Django 项目中有以下三个模型(表):

class Tool(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)
    name = models.CharField(db_column='Name', unique=True, max_length=50)

class Flow(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)
    Toolid = models.ForeignKey(Tool, models.DO_NOTHING, db_column='ToolId')
    name = models.CharField(db_column='Name', unique=True, max_length=50)

class Task(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)
    name = models.CharField(db_column='Name', max_length=50)
    FlowId = models.ForeignKey('Flow', models.DO_NOTHING, db_column='FlowId')

我想进行 ORM 查询,returns Tool、Flow 和 Task 的所有信息一起相互关联(即 SQL 查询中的 JOIN 方法)。例如,我想得到这样的东西:

[
 { Tool name: ...
   Flow name: ...
   Task name: ...
 }
 { Tool name: ...
   Flow name: ...
   Task name: ...
 }
 ...
 ...
]

你知道我应该写什么 ORM 语句来获得那个输出吗? 我真的很想从所有三个表中获取结果(不仅仅是其中两个)!

如果您能提供与我上面提供的表格相关的语法,我将不胜感激。

非常感谢!

由于 TaskFlow 有一个外键,Flow 有一个外键 Tool,您应该能够在一个查询中检索它们,例如:

task_flow_tool_tuple_list = Task.objects.all().values_list('name', 'FlowId__name', 'FlowId__Toolid__name')

您使用 'dunders'(双下划线)到 link 从一个模型到另一个模型,最后到链中最后一个模型的您想要的属性。所以我们正在选择所有任务对象,并为每个对象返回一个列表:

  • 任务名称
  • 任务的 FlowId 名称
  • Task 的 FlowId 的 Toolid 的名称

希望对您有所帮助,编码愉快!