通过 orm 的 django 子查询

Posted

技术标签:

【中文标题】通过 orm 的 django 子查询【英文标题】:django subquery via orm 【发布时间】:2010-08-04 11:42:52 【问题描述】:

我有模型:

class Site(models.Model):
    profile = models.ForeignKey(User)

class Profile(models.Model):
    blacklist = models.ManyToManyField(Site)

我怎样才能通过 django orm 进行等效的查询?

SELECT * FROM site WHERE 2 NOT IN (SELECT site_id FROM profile_blacklist WHERE profile_site.profile_id=site.profile_id)

我需要某种黑名单过滤器。每个站点都有用户(配置文件)。该用户有网站黑名单。我确实搜索了 id=2 的站点,例如。我需要网站,女巫所有者在黑名单中没有 2 号网站。

【问题讨论】:

【参考方案1】:

不要用 SQL 来思考。想想你想要什么结果。

我真的不明白你为什么要在那个 SQL 中使用子查询。看来您要做的是找到所有 ID 为 2 的类别的网站。对吗?

如果是这样,你想要的是:

Site.objects.filter(category__id=2)

【讨论】:

抱歉,我的第一个问题描述不好。我编辑主题。

以上是关于通过 orm 的 django 子查询的主要内容,如果未能解决你的问题,请参考以下文章

内连接子查询 Django ORM 等效

如何在 Django orm 中执行子查询?

Django ORM使用子查询按关键字搜索文本

如何在 django ORM 的 From 子句中编写子查询

在 Django 的 ORM 中使用带有 UPDATE 的子查询

Django ORM queryset object 解释(子查询和join连表查询的结果)