在使用 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的不同
使用SQL语言了解Django ORM中的分组(group by)和聚合(aggregation)查询