如何检索每个销售订单的 many2many 字段的值?

ber*_*iox 4 python openerp odoo-8 odoo-9

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

它是如何在下图中显示的:

图 1: 在此处输入图片说明

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

图 2: 在此处输入图片说明

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

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

图 3: 在此处输入图片说明

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

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

非常感谢

ale*_*lay 5

该关系未存储在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);
Run Code Online (Sandbox Code Playgroud)

这会给你一排的每个组合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;
Run Code Online (Sandbox Code Playgroud)

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