在 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 语句来获得那个输出吗?
我真的很想从所有三个表中获取结果(不仅仅是其中两个)!
如果您能提供与我上面提供的表格相关的语法,我将不胜感激。
非常感谢!
由于 Task
的 Flow
有一个外键,Flow
有一个外键 Tool
,您应该能够在一个查询中检索它们,例如:
task_flow_tool_tuple_list = Task.objects.all().values_list('name', 'FlowId__name', 'FlowId__Toolid__name')
您使用 'dunders'(双下划线)到 link 从一个模型到另一个模型,最后到链中最后一个模型的您想要的属性。所以我们正在选择所有任务对象,并为每个对象返回一个列表:
- 任务名称
- 任务的 FlowId 名称
- Task 的 FlowId 的 Toolid 的名称
希望对您有所帮助,编码愉快!
我的 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 语句来获得那个输出吗? 我真的很想从所有三个表中获取结果(不仅仅是其中两个)!
如果您能提供与我上面提供的表格相关的语法,我将不胜感激。
非常感谢!
由于 Task
的 Flow
有一个外键,Flow
有一个外键 Tool
,您应该能够在一个查询中检索它们,例如:
task_flow_tool_tuple_list = Task.objects.all().values_list('name', 'FlowId__name', 'FlowId__Toolid__name')
您使用 'dunders'(双下划线)到 link 从一个模型到另一个模型,最后到链中最后一个模型的您想要的属性。所以我们正在选择所有任务对象,并为每个对象返回一个列表:
- 任务名称
- 任务的 FlowId 名称
- Task 的 FlowId 的 Toolid 的名称
希望对您有所帮助,编码愉快!