【问题标题】:Exclude object from queryset if any of it's many to many related objects has a given property value如果多对多相关对象中的任何一个具有给定的属性值,则从查询集中排除对象
【发布时间】:2021-07-19 23:05:25
【问题描述】:

假设我有这样的模型:

class Bar(Model):
  value = IntegerField()

class Foo(Model):
  bars = ManyToManyField(Bar)

现在,我如何获取 Foo 对象的查询集,不包括那些具有 bars 对象且值为 0 的对象?

对应的 Python 代码如下:

foos_ids_to_exclude = []
for foo in Foo.objects.all():
  for bar in foo.bars.all():
    if bar.value == 0:
      foos_ids_to_exclude.append(foo.id)
      break

resulting_queryset = Foo.objects.exclude(id__in=foos_ids_to_exclude)

但是我如何在 DjangoORM 级别上做到这一点?甚至有可能吗?

如果可能,我想在不评估查询集的情况下执行此操作。

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    您可以与.exclude(…) [Django-doc] 合作:

    Foo.objects.exclude(<b>bars__value=0</b>)

    请注意,没有任何相关 BarFoos 仍将在查询集中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多