假设我有两个模型:
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”。我宁愿不这样做,它的扩展性很差。
Subquery
:
from django.db.models import Subquery
results = One.objects.exclude(name__in=Subquery(Two.objects.values("name")))