0

同じ 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に、それはオプションではありません:(

明るいアイデアはありますか?

4

1 に答える 1

0

以下は動作しませんか?

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