我有两个这样的模型:
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/