【问题标题】:How to retrieve the value of a many2many field for each sale order?如何检索每个销售订单的 many2many 字段的值?
【发布时间】:2016-08-21 19:48:12
【问题描述】:

我在 sale.order 模型中创建了一个 many2many 字段,它与fleet.vehicle 模型(id)相关。

如下图所示:

图片 1:

嗯,'x_vehiculo' 字段是一个多选字段,如下图所示:

图片 2:

这个想法是,对于每个销售订单,我可以存储超过 1 辆车。

问题是当我在 SGB Postgresql (PgAdmin III) 中进行查询时,我看不到每个销售订单的 x_vehiculo' 字段的值。

图片 3:

有什么方法可以检索每个 sale.order 的“x_vehicle”多选字段的值?

如果有人可以帮助我,请。不胜感激。

非常感谢

【问题讨论】:

    标签: python openerp odoo-8 odoo-9


    【解决方案1】:

    关系未存储在sale_order 表中。因为它是many2many,所以它存储在一个关系表中。根据您的屏幕截图,您的关系表是这样的:x_fleet_vehicle_sale_order_rel

    要查询车辆,您必须像这样通过此表加入:

    select so.name, fv.name
    from sale_order so
    left join x_fleet_vehicle_sale_order_rel rel on (rel.sale_order_id = so.id)
    left join fleet_vehicle fv on (fv.id = rel.fleet_vehicle_id);
    

    这将为sale.orderfleet.vehicle 的每个组合提供一行。如果您想按销售订单对它们进行分组,您可以这样做:

    select so.name, array_agg(fv.name) as vehicles
    from sale_order so
    left join x_fleet_vehicle_sale_order_rel rel on (rel.sale_order_id = so.id)
    left join fleet_vehicle fv on (fv.id = rel.fleet_vehicle_id)
    group by so.name;
    

    这将为每个 sale.order 返回一行,并为该订单附加一个 fleet.vehicle 名称列表。

    【讨论】:

    • 非常感谢,我能理解并在您的支持下做到这一点。
    【解决方案2】:

    该字段在您声明的表上不可用,它是 Many2many 关系,因此将为它创建一个单独的“连接”表,该表的名称是

    x_fleet_vehicle_sale_order_rel

    该表将包含字段sale_order_idfleet_vehicle_id

    所以你应该查询那个表而不是你声明x_vehiculo的表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2011-06-08
      相关资源
      最近更新 更多