【问题标题】:Django - filtering over many to many only checks first recordDjango - 过滤多对多只检查第一条记录
【发布时间】:2013-08-23 17:57:00
【问题描述】:
class ModelA(models.Model):
    model_b = models.ManyToManyField('models.ModelB')

class ModelB(models.Model):
    some_bool = models.BooleanField(default=False)

鉴于这两个模型,假设我有两个与 ModelA 实例相关的 ModelB 实例...

mod_a = ModelA()
mod_a.save()

mod_b1 = ModelB(some_bool=True)
mod_b1.save()

mod_b2 = ModelB(some_bool=False)
mod_b2.save()

mod_a.model_b.add(mod_b1, mod_b2)

我现在想做一个类似的查询:

queryset = ModelA.objects.exclude(model_b__some_bool=True)

除了它会遍历 ModelA 实例的所有相关 ModelB 实例,并在任何 ModelB 实例的 some_bool 字段设置为 True 时排除该实例。我知道这将需要一个更复杂的查询(我展示的那个只会检查它遇到的第一个 ModelB 实例,并完全以此为基础)。

【问题讨论】:

  • 让实际问题更清晰。

标签: django filter many-to-many django-queryset


【解决方案1】:

这个:

我展示的那个只会检查它遇到的第一个 ModelB 实例,并完全以此为基础

不正确。您显示的查询将完全按照您的意愿行事:排除所有 ModelAs if any 相关的 model_b 具有 some_bool=True。

【讨论】:

  • 好的,我显然在某个地方遇到了一些意想不到的行为!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多