【问题标题】:Spanning a RelatedManager object in a query [Django]在查询中跨越一个 RelatedManager 对象 [Django]
【发布时间】:2019-11-18 03:32:14
【问题描述】:
  1. 我可以像这样在 django 过滤器中跨越模型关系:

my_asset__business_unit=user.business_unit.id

  1. 如果最后一项返回多个值,我可以使用__inall()

my_asset__business_unit__in=user.business_units.all()

但是我如何跨越一个中间模型返回多个值?我想找到与这些值匹配的所有下游模型。


我试过了

my_asset__business_unit__in=user.businessunitmemberships.businessunit_set.all()

但是businessunitmemberships 是一个'RelatedManager' 对象,没有'businessunit_set' 属性。

我也试过 my_asset__business_unit__in=user.businessunitmemberships.all().businessunit_set.all()

但是中间 .all() 返回一个查询集对象,它又没有属性 businessunit_set

我也试过 my_asset__business_unit__in=user.businessunitmemberships.get().businessunit_set.all()

但这也不起作用,因为.get() 将返回 3 个结果而不是 1 个。


编辑:描述了整个模型 here 但我认为这使问题过于复杂。

【问题讨论】:

    标签: python django


    【解决方案1】:

    不清楚您想要实现什么,但如果我理解正确,那么获取与每个业务部门成员相关的所有业务部门就可以了:

    my_asset__business_unit__in={
        unit
        for membership in user.businessunitmemberships.all()
        for unit in membership.businessunit_set.all()
    }
    

    集合推导是为了保持单位的唯一性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2017-03-04
      • 2022-01-21
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      相关资源
      最近更新 更多