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

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

我有一個ItemSets的列表。我想查找其中Item對象位於至少一個ItemSet對象的「項目」M2M字段中的所有Item對象。Django過濾查詢集交集?

我該怎麼做?

P.S.以下是我已經盡力了,但無濟於事:

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

錯誤嗎?當你嘗試時發生了什麼?另外,從哪裏獲取項目集列表?你有沒有爲他們查詢? – Paragon

回答

7

如果你需要你的項目集的列表中,您沒有從查詢得到他們,試試這個:

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) 

如果可以的話通過查詢獲取您的項目集列表,這將其縮短了一點點:

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