我的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查询,以一起返回彼此相关的工具,流程和任务的所有信息(即SQL查询中的JOIN方法)。例如,我想要这样的东西:
[
{ Tool name: ...
Flow name: ...
Task name: ...
}
{ Tool name: ...
Flow name: ...
Task name: ...
}
...
...
]
您知道我应该写什么ORM句子才能获得该输出?我真的很想从所有三个表中获得结果(而不仅仅是从其中两个表中)!
如果您向我提供与我上面提供的表有关的语法,将不胜感激。
非常感谢!
由于Task
的Flow
具有外键,而Tool
则具有外键,因此您应该能够在一个查询中将它们全部检索出来,例如:
task_flow_tool_tuple_list = Task.objects.all().values_list('name', 'FlowId__name', 'FlowId__Toolid__name')
您使用'dunders'(双下划线)在模型之间进行链接,最后在链中的最后一个模型中链接至所需的属性。因此,我们选择所有Task对象,并为每个对象返回以下列表:
希望有帮助,祝您编程愉快!