【发布时间】:2022-01-25 14:14:35
【问题描述】:
我在 Django 中有以下模型架构(请注意,我省略了 ModelB 类的详细概述,因为它与问题无关)
class ModelA(Models.model):
b = models.ManyToManyField(ModelB, blank=True)
给定一个 ModelA 对象的 QuerySet,我想接收查询集中存在的所有唯一 M2M 组合(ModelB 对象)。例如,对于以下 4 个 ModelA 对象的查询集:
| id | b (m2m field) |
| -------- | ---------------- |
| 1 | [1,2,3] |
| 2 | [1,2] |
| 3 | [1,2] |
| 4 | [] |
我想返回一个类似于[[1,2,3],[1,2],[]] 的列表/查询集。在 Django 中是否有一种优雅的方法可以做到这一点?我尝试执行以下操作:`
queryset.values_list('b',flat=True).distinct()
但这会返回整个表中存在的所有唯一 ModelB 对象的平面列表(例如:[1,2,3])。因此,我失去了 ModelB 对象在 m2m 字段中出现的组合的粒度。
【问题讨论】: