Manejo de Campos many2many
En OPENERP es muy común que encontrÔsemos en el código de algunos módulos la utilización de campos relacionales may2many, los cuales contienen la siguiente sintaxis:
(0, 0, { fields }) Crear nuevos registros con la lista de campos.
(1, ID, { fields }) Modificar la lista de campos.
(2, ID) Borrar un id de la relación many2many.
(3, ID) Quitar (desvincular) un id de la relación manay2many.
(4, ID) Vincular un id
(5, ID) Desvincular todas las veces que aparece un id
(6,?, IDS) Establecer una lista de enlaces
Por ejemplo para enlazar los impuestos de un producto al crear una linea en pedidos de venta o en lineas de factura nuestros valores quedarĆan de la siguiente manera:
pedido_padre_id = 65
product_obj = self.pool.get('product.product')
product_id = product_obj.search(cr, uid, [('name','=','Soda 2.5 Litros')])
product_browse = product_obj.browse(cr, uid, product_id, context=None)[0]
linea_venta = {
'product_id' : product_browse.id,
'product_uom_qty' : 1,
'product_uom' : product_browse.uom_id.id,
'product_uos_qty' : 1,
'price_unit' : product_browse.list_price,
'name' : product_browse.name,
'type' : 'make_to_stock',
'default_code' : product_browse.default_code,
'tax_id' : [(6, 0, [x.id for x in line.product_id.taxes_id])],
'order_id' : pedido_padre_id,
})
order_line_id = self.pool.get('sale.order.line').create(cr, uid, linea_venta, context=None)
Que pasa en este ejemplo estoy creando una linea para el pedido de venta con el ID 65 en la cual estoy pasando la información del producto 'Soda de 2.5 Litros' hacia mi linea, el punto mas importante en este ejemplo ó la que estamos estudiando es 'tax_id' : [(6, 0, [x.id for x in line.product_id.taxes_id])], que estamos haciendo en esta parte del código, estamos enlazando los impuestos del producto anterior en mi linea de pedido, ésto nos evita que nosotros realicemos la creación de cada impuesto al momento de mandar cada linea a un pedido de venta.