同じ 3 番目のモデルを指す M2M フィールドを持つ 2 つのモデルがあります。
class Moo(models.Model):
...
class Foo(models.Model):
moos = models.ManyToManyField(Moo, blank=True)
class Bar(models.Model):
moos = models.ManyToManyField(Moo)
'manytomany' オブジェクトが選択されていないか、個々の 'Bar' オブジェクトに一致する 1 つ以上の manytomany オブジェクトを持っているすべての 'Foo' オブジェクトを見つける必要があります。
したがって、私のデータは次のようになります。
foo1.moos__all = 'boo', 'yah'
foo2.moos__all = <none>
foo3.moos__all = 'suck'
bar1.moos__all = 'boo'
次に、この検索を実行すると、次のようになります。
bar1.find_matches()
>>> foo1, foo2
以前のデータ モデルは、少なくとも 1 つのアイテムの一致を含める必要があったため、次のように簡単でした。
Foo.objects.filter(manytomany__in=bar1.moos.all())
モデルが変更され、Foo.moos が空白になる可能性があります。要するに、私はこれを行う必要があります:
Foo.objects.filter(
Q(moos__in=bar1.moos.all()) | Q(moos__count=0)
)
悲しいこと__count
に、それはオプションではありません:(
明るいアイデアはありますか?