2012-05-06 56 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)