获取Django QuerySet中所有相关的多对多对象
我有一堆复杂的Django模型,它们之间有很多关系,特别是有很多对多的字段来描述这些关系。
我想知道,最简单的方法是什么,能从一个查询集中获取一个相关模型的独特成员列表。
比如说,我有一个Item模型,它有一个指向Groups模型的ManyToMany字段。
如果我有一组Item的查询集,叫做'items',我该怎么做才能得到这个:
groups = items[0].groups.all().values_list('name', flat=True)
但是如果是整个集合呢?我需要一个个遍历它们,然后用set().intersect()吗?
1 个回答
18
一种解决办法是使用两个查询。
你可以利用反向关系来查询所有与你在items
中某个Item
相关联的Group
。
groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True)