在Django中使用哪种ORM语法联接三个表?

问题描述 投票:0回答:1

我的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句子才能获得该输出?我真的很想从所有三个表中获得结果(而不仅仅是从其中两个表中)!

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

非常感谢!

django django-models orm django-views django-queryset
1个回答
0
投票

由于TaskFlow具有外键,而Tool则具有外键,因此您应该能够在一个查询中将它们全部检索出来,例如:

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

您使用'dunders'(双下划线)在模型之间进行链接,最后在链中的最后一个模型中链接至所需的属性。因此,我们选择所有Task对象,并为每个对象返回以下列表:

  • 任务名称
  • 任务的FlowId的名称
  • 任务的FlowId的工具ID

希望有帮助,祝您编程愉快!

© www.soinside.com 2019 - 2024. All rights reserved.