Django - 过滤多对多仅检查第一条记录

时间:2013-08-21 11:24:42

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

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的第一个实例,并完全基于它)。

1 个答案:

答案 0 :(得分:2)

此:

  

我展示的那个只检查它遇到的ModelB的第一个实例,完全基于

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