如何使用django检查M2M匹配或无

时间:2013-01-02 15:58:55

标签: django django-orm

我有两个模型,M2M字段指向相同的第三个模型:

class Moo(models.Model):
    ...

class Foo(models.Model):
    moos = models.ManyToManyField(Moo, blank=True)

class Bar(models.Model):
    moos = models.ManyToManyField(Moo)

我需要找到所有'Foo'对象,这些对象要么没有选择'manytomany'对象,要么找到至少一个与单个'Bar'对象匹配的多对象。

所以我的数据可能如下所示:

foo1.moos__all = 'boo', 'yah'
foo2.moos__all = <none>
foo3.moos__all = 'suck'

bar1.moos__all = 'boo'

然后进行此搜索将产生:

bar1.find_matches()
>>> foo1, foo2

用于的数据模型包含至少一个项目匹配,因此非常简单:

Foo.objects.filter(manytomany__in=bar1.moos.all())

现在模型已经改变了,Foo.moos可以是空白的。简而言之,我需要这样做:

Foo.objects.filter(
    Q(moos__in=bar1.moos.all()) | Q(moos__count=0)
)

可悲的是__count不是一个选择:(

有什么好主意吗?

1 个答案:

答案 0 :(得分:0)

以下不起作用吗?

Foo.objects.filter(
    Q(moos__in=bar1.moos.all()) | Q(moos=None)
)