从 Django QuerySet 中获取所有相关的多对多对象
Posted
技术标签:
【中文标题】从 Django QuerySet 中获取所有相关的多对多对象【英文标题】:Get all related many-to-many objects from a Django QuerySet 【发布时间】:2011-06-16 22:52:53 【问题描述】:我有一个错综复杂的相互关联的 Django 模型,其中包含描述关系的多对多字段。
从 QuerySet 中获取相关模型的唯一成员列表的最简洁方法是什么?
如果我有一个 Item 模型,其中的组 ManyToMany 指向 Groups 模型。
如果我有一个项目的查询集,“项目”,我如何得到这个:
groups = items[0].groups.all().values_list('name', flat=True)
但是对于整个系列?我需要遍历它们并执行 set().intersect() 吗?
【问题讨论】:
【参考方案1】:一种解决方案是使用 2 个查询。
您可以使用反向关系查询您的items
中的Item
指向的所有Group
s。
groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True)
【讨论】:
足够优雅。谢谢。 您可能还会发现使用flat=True
作为values_list
的参数很有用,它会将结果作为名称列表而不是名称元组列表返回。
@gorus -- 已更新。我觉得很有趣,我从原始帖子中删除了 flat ,因为我把它与 distinct 混淆了。以上是关于从 Django QuerySet 中获取所有相关的多对多对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用附加过滤的相关对象作为 Django 中的字段来获取结果?
如何从 Django QuerySet 中获取绝对图像 URL 列表?