【问题标题】:Get all related many-to-many objects from a Django QuerySet从 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() 吗?

【问题讨论】:

    标签: python django many-to-many django-queryset


    【解决方案1】:

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

    您可以使用反向关系查询您的items 中的Item 指向的所有Groups。

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

    【讨论】:

    • 足够优雅。谢谢。
    • 您可能还会发现使用flat=True 作为values_list 的参数很有用,它会将结果作为名称列表而不是名称元组列表返回。
    • @gorus -- 已更新。我觉得很有趣,我从原始帖子中删除了 flat ,因为我把它与 distinct 混淆了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2017-04-22
    • 2022-01-17
    相关资源
    最近更新 更多