django - 在 Django QuerySet 中,如何在多对一关系中过滤 "not exists"

标签 django django-models django-orm

我有两个这样的模型:

class User(models.Model):
    email = models.EmailField()

class Report(models.Model):
    user = models.ForeignKey(User)

实际上每个模型都有更多字段,这些字段对这个问题没有影响。

我想过滤所有电子邮件以“a”开头且没有报告的用户。将有更多的.filter().exclude() 基于其他字段的条件。

我想这样处理:

users = User.objects.filter(email__like = 'a%')

users = users.filter(<other filters>)

users = ???

我想要???过滤掉没有关联报告的用户。我该怎么做?如果这不可能像我介绍的那样,有什么替代方法?

最佳答案

注意:此答案是在 2013 年为 Django 1.5 编写的。查看其他答案,了解适用于较新版本 Django 的更好方法

使用isnull .

users_without_reports = User.objects.filter(report__isnull=True)
users_with_reports = User.objects.filter(report__isnull=False).distinct()

当您使用 isnull=False 时,需要使用 distinct() 来防止重复结果。

关于django - 在 Django QuerySet 中,如何在多对一关系中过滤 "not exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831327/

相关文章:

python - OneToOne 和 Django 中的模型子类化有什么区别

django - 如何使用单个查询集获取关系模型中的所有相关对象?

sql - 流行度算法 - SQL/Django

python - 获取已发送电子邮件的 MessageID 的最简单/最干净的方法是什么?

python - Django 尝试拆分和 urlify 模型中的标签,但代码不起作用

python - Django:删除对象中的 m2m 关系

django - django左联接查询

django - 如果项目位于 python 列表中,则注释 bool 字段

python - Django 总共只允许一个用户 session

python - 无法在 Django 中将类从一个应用程序导入另一个应用程序