2009-09-21 51 views
3

大家好*值的查詢集過濾器(對不起我的英文不好:P)Django的:對於*從ManyToManyField

想象一下這些機型:

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

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

現在我想檢索與籃實例全部水果。 問題是代碼波紋管返回有關籃實例的任何水果:

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

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

任何解決方案都解決這個問題呢?

非常感謝。 :)

回答

6

我沒有方便的數據集來測試這一點,但我認爲它應該工作:

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

它詮釋與有關水果的數量每籃對象,並篩選出那些有籃果數等於水果總數。

注意:您需要使用Django 1.1才能正常工作。

+0

很好,這個作品!謝謝 :) – user176455 2009-09-21 10:29:59