4

こんにちは(下手な英語でごめんなさい:p)

これらのモデルを想像してください:

class Fruit(models.Model):
    # ...

class Basket(models.Model):
    fruits = models.ManyToManyField(Fruit)

ここで、すべての果物に関連する Basket インスタンスを取得したいと思います。問題は、次のコードが果物に関連するBasket インスタンスを返すことです。

baskets = Basket.objects.filter(fruits__in=Fruit.objects.all())

# This doesn't work:
baskets = Basket.objects.filter(fruits=Fruit.objects.all())

この問題を解決する解決策はありますか?

どうもありがとうございました。:)

4

1 に答える 1

6

これをテストするのに便利なデータセットはありませんが、うまくいくはずです:

Basket.objects.annotate(num_fruits=Count('fruits')).filter(num_fruits=len(Fruit.objects.all()))

すべてのバスケット オブジェクトに関連する果物の数で注釈を付け、果物の総数と等しい数の果物を持つバスケットを除外します。

注: これを機能させるには、Django 1.1 が必要です。

于 2009-09-21T10:02:33.047 に答える