在使用 ORM 的 Django 中,如何对不同的值进行多个自连接

Posted

技术标签:

【中文标题】在使用 ORM 的 Django 中,如何对不同的值进行多个自连接【英文标题】:In Django using ORM., how to do multiple self join on different values 【发布时间】:2018-01-10 23:27:00 【问题描述】:

谁能帮助我如何使用 ORM 在 Django 中针对不同的值编写多个自联接?

例如,我们有两张桌子。 (1) 项目 (2) project_tab_status

我编写了如下查询,但无法访问第二个连接字段:

Project.objects.filter(projecttabstatus__tab_status_type='processor1').annotate(tab_status_type_bv=Concat('projecttabstatus__tab_status_type', Value(''), Value('')),tab_status_bv=Concat('projecttabstatus__tab_status', Value(''), Value(''))).filter(projecttabstatus__tab_status_type='processor2').values('name', 'tab_status_type_bv', 'projecttabstatus__tab_status_type', 'projecttabstatus__tab_status', 'tab_status_bv', 'projecttabstatus__id').filter(id=698)

但第二个处理器的值不正确。

【问题讨论】:

贴出模型结构 您好,Exprator 先生,感谢您选择我的问题。请点击下面的链接获取模型结构i.stack.imgur.com/oOiFO.png 【参考方案1】:

您可以尝试关注backward的关系。

all_projects = Projects.objects.all()
for project in all_projects:
    project.project_tab_status_set.all()  # this will give you the project_tab_status objects associated with a given project.

【讨论】:

您好,感谢您选择我的问题。实际上,我们正在遍历父项目的 for 循环相同。并且父项目未与 project_tab_status 映射。只有子项目与 project_tab_status 表映射。 (这就是为什么我在上面的查询中保留了 parent_project_id 过滤器。) 不知道你说的父项目和子项目是什么意思?

以上是关于在使用 ORM 的 Django 中,如何对不同的值进行多个自连接的主要内容,如果未能解决你的问题,请参考以下文章

[Django]Django的orm中get和filter的不同

Django ORM命令获取没有空字段的不同值

使用SQL语言了解Django ORM中的分组(group by)和聚合(aggregation)查询

如何查看Django ORM执行的SQL语句

如何在 Django ORM 中进行单字符替换( _ )的通配符搜索?

django的 ORM 操作 增加和查询