2009-09-21 8 views
3

Hi (простите за мой плохой английский: р)Джанго: QuerySet фильтр * все * значения из ManyToManyField

Представьте себе эти модели:

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()) 

Любое решение действительно решить эту проблему?

спасибо. :)

ответ

6

У меня нет набора данных под рукой, чтобы проверить это, но я думаю, что это должно работать:

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

Он помечает каждый объект корзины с тем количеством связанных фруктов и отфильтровывает те корзины, которые имеют количество фруктов, равное суммарному количеству фруктов.

Примечание: вам необходимо Django 1.1 для этого.

+0

Отлично, это работает! Спасибо :) – user176455

Смежные вопросы