2009-09-21 50 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