【问题标题】:How to do LEFT OUTER JOIN on Django ORM on non ForeignKey field如何在非外键字段上的 Django ORM 中进行 LEFT OUTER JOIN
【发布时间】:2020-11-22 00:08:01
【问题描述】:

我有 2 个模型:

model A:
  name = CharField()
  ...

model B:
  title = CharField(null=True)
  ...

我想通过 "name" = "title"

获取模型 B 中没有记录的模型 A 的所有记录

在 SQL 上我得到了这个:

SELECT  "A".* 
    FROM "A"
    LEFT OUTER JOIN "B"
     ON "A"."name" = "B"."title"
WHERE "B"."title" IS NULL

如何使用 Django ORM 编写这个?

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    您可以使用简单的exclude 和来自模型B 的所有标题的子查询,如下所示:

    A.objects.exclude(name__in=B.objects.all().values('title))

    【讨论】:

    • 看起来与我给出的 SQL 不完全相同,但它可以工作并给我想要的,非常简单的解决方案,谢谢!我想我需要休息一下:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2019-08-27
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多