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

sam*_*ome 13 python django many-to-many django-queryset

我有一个相互关联的Django模型的迷茫迷宫,其中包含描述关系的多对多字段.

从QuerySet获取相关模型的唯一成员列表的最简洁方法是什么?

如果我有一个Item模型,其中ManyToMany组指向Groups模型.

如果我有一个项目的查询集,'items',我该如何得到这个:

groups = items[0].groups.all().values_list('name', flat=True)
Run Code Online (Sandbox Code Playgroud)

但对于整套?我是否需要遍历它们并执行set().intersect()?

Yuj*_*ita 18

一种解决方案是使用2个查询.

您可以使用反向关系查询所有Groups表示的Item在你items点.

groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True)
Run Code Online (Sandbox Code Playgroud)

  • 您可能还会发现使用`flat = True`作为`values_list`的参数很有用,它会将结果作为名称列表返回,而不是名称元组列表. (2认同)