2009-09-21 6 views
3

Salut (désolé pour mon mauvais anglais: p)Django: Filtre queryset pour * toutes les valeurs * d'un ManyToManyField

Imaginez ces modèles: instances

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

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

Maintenant, je voudrais récupérer Panier liés à tous fruits. Le problème est que le soufflet de code renvoie les instances de panier liés à les fruits:

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

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

Toute solution ne résolvent ce problème?

Merci beaucoup. :)

Répondre

6

je n'ai pas un jeu de données à portée de main pour tester, mais je pense que cela devrait fonctionner:

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

elle annote chaque objet du panier avec le nombre de fruits connexes et filtre ces paniers qui ont un compte de fruits qui équivaut à la quantité totale de fruits.

Remarque: vous avez besoin de Django 1.1 pour que cela fonctionne.

+0

Génial, ça marche! Je vous remercie :) – user176455