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 中的字段来获取结果?