class Item(models.Model):
...
class ItemSet(models.Model):
items = models.ManyToManyField(Item, related_name="itemsets")
我有一个ItemSet列表。我想找到所有Item对象,其中Item对象位于至少一个ItemSet对象的“items”M2M字段中。
我该怎么做?
P.S。这是我尝试过的,但无济于事:
itemset_list = [itemset1, itemset2, itemset3]
items = Item.objects.filter(itemsets__in=itemset_list)
答案 0 :(得分:9)
如果您需要项目集列表,而您没有从查询中获取它们,请尝试以下方法:
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)