Django Queryset 过滤器检查相关对象是不是存在

Posted

技术标签:

【中文标题】Django Queryset 过滤器检查相关对象是不是存在【英文标题】:Django Queryset filter checks if related objects existDjango Queryset 过滤器检查相关对象是否存在 【发布时间】:2016-01-15 20:18:50 【问题描述】:

我正在尝试创建一个自定义管理器,它返回所有没有附加 Bar 的 Foo 实例。

# models.py
class Foo(models.Model):
    ...

class Bar(models.Model):
    foo = models.OneToOneField(Foo)
    ...

# managers.py
class FooQueryset(BaseQueryset):
    def no_bar(self):
        return ???

class FooManager(BaseManager):
    def get_queryset(self):
        return EcheanceQueryset(self.model, using=self._db)

    def no_bar(self):
        return self.get_queryset().no_bar()

我正在就查询集寻求帮助以获得所需的结果

【问题讨论】:

【参考方案1】:

试试

class FooManager(BaseManager):

    def no_bar(self):
        return self.get_queryset().filter(bar__isnull=True)

【讨论】:

很抱歉打扰您,但是您可以在 bar__isnull 中过滤 bar 吗?我只想过滤活跃的 Bar 实例。谢谢 你的意思是bar is None or bar.active == True 吗? self.get_queryset().filter(Q(bar__isnull=True)|Q(bar.active==True)) self.get_queryset().exclude(Q(bar__isnull=False)&Q(bar__active=True)) 为我工作,谢谢。

以上是关于Django Queryset 过滤器检查相关对象是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤 Django QuerySet 的相关字段“全部”或“无”

Django Queryset:按相关项目管理器过滤

如何使用附加过滤的相关对象作为 Django 中的字段来获取结果?

Django queryset - 在对象上应用过滤器时仅返回匹配的多记录

模板中的 Django 动态对象过滤问题

Django通过不同的相关对象注释QuerySet中的几个相同对象