Django: query filter for all * values ​​from ManyToManyField

Hi (sorry for my bad english: p)

Imagine these models:

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

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

Now I would like to get basket instances that apply to all fruits. The problem is that the following code returns basket instances associated with any fruit:

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

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

Does any solution solve this problem?

Many thanks.:)

+3
source share
1 answer

I don't have a dataset suitable for checking this, but I think it should work:

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

, , .

. Django 1.1.

+6

Source: https://habr.com/ru/post/1718169/


All Articles