2012-05-06 24 views
5
class Item(models.Model): 
    ... 

class ItemSet(models.Model): 
    items = models.ManyToManyField(Item, related_name="itemsets") 

Ho una lista di ItemSet. Voglio trovare tutti gli oggetti Item in cui l'oggetto Item si trova nel campo "Oggetti" M2M su almeno uno degli oggetti ItemSet.Filtro Django sull'intersezione queryset?

Come posso fare questo?

P.S. Ecco quello che ho provato, ma inutilmente:

itemset_list = [itemset1, itemset2, itemset3]  
items = Item.objects.filter(itemsets__in=itemset_list) 
+1

Errore? Cosa è successo quando l'hai provato? Inoltre, da dove ottieni l'elenco di set di elementi? Hai richiesto per loro? – Paragon

risposta

7

Se avete bisogno della vostra lista di set di elementi e non hai avuto li da una query, provate questo:

itemset_list = [itemset1, itemset2, itemset3] 
itemset_list_ids = [itemset.id for itemset in itemset_list] 
itemset_queryset = ItemSet.objects.filter(id__in=itemset_list_ids) 
items = Item.objects.filter(itemsets__in=itemset_queryset) 

Se è possibile ottieni il tuo elenco di articoli interrogando, che lo accorcia un po ':

itemset_queryset = ItemSet.objects.filter(SOME FILTER HERE) 
items = Item.objects.filter(itemsets__in=itemset_queryset) 
Problemi correlati