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

时间:2021-07-23 20:16:48

I have a twisty maze of interrelated Django models, with many-to-many fields describing the relationships.

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

What's the cleanest way to get a list of unique members of a related model from a QuerySet?

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

If I have a Item model with a groups ManyToMany pointing to the Groups model.

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

If I have a queryset of Items, of 'items', how do I get this:

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

groups = items[0].groups.all().values_list('name', flat=True)

But for the whole set? Do I need to iterate through them all and do set().intersect() ?

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

1 个解决方案

#1


17  

One solution is to use 2 queries.

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

You can use the reverse relationships to query all Groups that an Item in your items points to.

您可以使用反向关系查询项目中的项目指向的所有组。

groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True)

#1


17  

One solution is to use 2 queries.

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

You can use the reverse relationships to query all Groups that an Item in your items points to.

您可以使用反向关系查询项目中的项目指向的所有组。

groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True)