我有两个这样的型号:

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 = ???

我想要的是?将没有与其关联的报告的用户过滤出站.我该怎么做呢?如果这不可能像我所说的那样,那么还有什么替代方法呢?

推荐答案

Note: this answer was written in 2013 for Django 1.5. See the other answers for better approaches that work with newer versions of 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查询与一个包含句子

Django-Values()并按月分组

我无法在Django模板中使用Get_Foo_Display

如何将Django项目连接到容器化的PostgreSQL数据库?

当前路径 **/POST 与其中任何一个都不匹配

使用OuterRef过滤器获取Django记录的最大值

有谁知道是否可以将您的 Django Heroku 应用程序放到 App Store/Google Play 上?

Django:想要将一个空字段显示为空白而不是显示无

Django - 强制执行 ManyToManyField 唯一项

NoReverseMatch 错误

如何将 Django forms.ChoiceField 呈现为 Twitter Bootstrap 下拉菜单

Django BigInteger自动增量字段作为主键?

Django 1.9 中 django.db.models.loading.get_model() 的类似功能是什么?

测试 Django 信号的正确方法

Django ModelChoiceField optgroup 标签

整数的Python正则表达式?

过滤 Django 数据库中包含数组中任何值的字段

Django:验证上传文件的文件类型

如何在该元素中的所有应用程序之间共享元素范围的模板标签

左加入 Django ORM