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.
Excelente explicación.
ResponderBorrarSi quieres acceder a los valores del campo many2one usas algo así:
product_id.name y te regresa el nombre del producto asociado a product_id,
¿hay una forma similar de hacerlo para un campo many2many?,
probé con algo así:
motivos_ids.motivo_id.name, dónde motivos_ids es el campo many2many, pero me da error.
Saludos!
Hola Diego, me podrias explicar en si que es lo que necesitas?
BorrarSaludos
no tendran videos bien explicaditos . gracias
ResponderBorrarDe momento no amigo. Saludos
BorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarHola yo de nuevo la respuesta a mi duda es la siguiente:
Borrar'invoice_line_tax_ids':[(6,0,[10,8])]
listo con eso lo agrega de manera automática
espero y les sirva y recuerden amar es compartir
Buenos días, como hago para crear un impuesto que en lugar de calcularse de la linea base, se calcule de otro campo,por ejemplo de la utilidad. Gracias
ResponderBorrar