使用 Django ORM 在不相关的模型之间进行左外连接?

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

假设我有两个模型:

class One(models.Model):
    name = models.CharField(max_length=300, unique=True)


class Two(models.Model):
    name = models.CharField(max_length=300, unique=True)

它们没有通过外键关联,并且有理由在这个项目中保留这种方式。

我想知道

One
实例中的
name
不在
Two
中。

这是获取该结果的 SQL:

select app_one.name
from app_one left join app_two on app_one.name = app_two.name
where app_two.name is null
group by 1;

是否可以通过 ORM 获得它,或者我只需要编写一个查询?

注意:一种可能的解决方案是查询出“一”的所有名称,并对“二”使用“IN”。我宁愿不这样做,它的扩展性很差。

django orm
1个回答
0
投票

您可以使用

Subquery

from django.db.models import Subquery

results = One.objects.exclude(name__in=Subquery(Two.objects.values("name")))
© www.soinside.com 2019 - 2024. All rights reserved.