【问题标题】:How to SelectMany using a Django QuerySet?如何使用 Django QuerySet 进行 SelectMany?
【发布时间】:2010-10-01 17:05:24
【问题描述】:

假设我有两个模型,AB,其中一个 A 可以有多个与之相关的 Bs。给定一个 A 对象的 QuerySet,如何创建一个包含与所有这些 A 对象相关的所有 B 对象的 QuerySet?

对于那些碰巧会说 LINQ 的人,我想要这样的东西:

queryableOfA.SelectMany(a => a.Bs)

更好的是如何链接 A -> B -> C 的示例,即以下 LINQ:

queryableOfA.SelectMany(a => a.Bs).SelectMany(b => b.Cs)

(返回与所有A 对象通过B 相关的所有C 对象的“查询集”)

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    对于 A 对象的查询集,您可以执行“in”启动查询:

    B.objects.filter(a__in=MyQueryset) 
    

    如果要查找通过 B 到 A 相关的所有 C 对象,则需要通过双下划线语法遵循关系。比如:

    C.objects.filter(b__a__in=MyAQueryset)
    

    【讨论】:

    • A 是一个封装模型的类。对对象的 filter() 调用会返回您正在寻找的查询集。如果您需要一个项目,请使用 .get() 但如果找到多个项目,则会引发 A.MultipleObjectsReturned 错误。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2018-01-15
    • 2012-12-26
    • 2011-02-28
    • 1970-01-01
    • 2020-10-01
    • 2011-12-28
    相关资源
    最近更新 更多