我有两个模型,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
不是一个选择:(
有什么好主意吗?
答案 0 :(得分:0)
以下不起作用吗?
Foo.objects.filter(
Q(moos__in=bar1.moos.all()) | Q(moos=None)
)