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的第一个实例,并完全基于它)。
答案 0 :(得分:2)
此:
我展示的那个只检查它遇到的ModelB的第一个实例,完全基于
不是真的。您显示的查询将完全符合您的要求:如果任何相关的model_b具有some_bool = True,则排除所有ModelAs。