0
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 实例,并完全以此为基础)。

4

1 回答 1

2

这:

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

不是真的。您显示的查询将完全符合您的要求:排除所有 ModelAs,如果任何相关的 model_b 具有 some_bool=True。

于 2013-08-21T11:43:33.520 回答