获取Django QuerySet中所有相关的多对多对象

14 投票
1 回答
13959 浏览
提问于 2025-04-16 10:45

我有一堆复杂的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)

撰写回答