Получите все связанные объекты "многие-ко-многим" из Django QuerySet

У меня есть извилистый лабиринт взаимосвязанных моделей Django с полями "многие-ко-многим", описывающие отношения.

Какой самый чистый способ получить список уникальных элементов связанной модели из QuerySet?

Если у меня есть модель Item с группами ManyToMany, указывающими на модель групп.

Если у меня есть набор запросов элементов "элементов", как это сделать:

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

Но для всего набора? Нужно ли перебирать все их и делать set(). Intersect()?

Ответы

Ответ 1

Одним из решений является использование 2 запросов.

Вы можете использовать обратные отношения, чтобы запросить все Group, что Item в ваших items указывает на.

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