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

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

Mam listę ItemSets. Chcę znaleźć wszystkie obiekty Item, w których obiekt Item znajduje się w polu "items" M2M na co najmniej jednym z obiektów ItemSet.Filtr Django na skrzyżowaniu queryset?

Jak mogę to zrobić?

P.S. Oto co próbowałem, ale bezskutecznie:

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

Czy to błąd? Co się stało, kiedy próbowałeś? Ponadto skąd otrzymujesz listę itemsets? Czy zapytałeś o nie? – Paragon

Odpowiedz

7

Jeśli potrzebujesz listę itemsets i nie dostać je z kwerendy, spróbuj tego:

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) 

Jeśli możesz uzyskać listę przedmiotów przez zapytanie, która to skraca nieco:

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