0

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

class Moo(models.Model):
    ...

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

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

我需要找到所有没有选择“manytomany”对象的“Foo”对象,或者至少有一个与单个“Bar”对象匹配的manytomany对象。

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

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的是不是一个选择:(

有什么好主意吗?

4

1 回答 1

0

以下不起作用吗?

Foo.objects.filter(
    Q(moos__in=bar1.moos.all()) | Q(moos=None)
)
于 2013-01-02T16:07:59.063 回答