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

时间:2016-08-21 19:48:13

标签: python openerp odoo-8 odoo-9

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

如何在以下图片中显示:

图片1:enter image description here

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

图片2:enter image description here

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

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

图片3:enter image description here

有没有办法可以为每个sale.order检索'x_vehicle'多选字段的值?

请有人帮助我。我非常感激。

非常感谢你

2 个答案:

答案 0 :(得分:4)

该关系未存储在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个名称列表。

答案 1 :(得分:1)

该字段不会在您声明的表格中提供,它是一个很多人关系,所以单独的加入'将为它创建表,该表的名称是

x_fleet_vehicle_sale_order_rel

该表格将包含字段sale_order_idfleet_vehicle_id

因此,您应该查询该表而不是您声明x_vehiculo

的表