Pregunta

Estoy tratando de insertar valores en una tabla de relaciones Many2Many o One2Manhy en Odoo (antigua apertura). ¿Tienes alguna idea de cómo hacer esto?

¿Fue útil?

Solución

Aquí hay un ejemplo del módulo de stock:

invoice_line_id = invoice_line_obj.create(cursor, user, {
    'name': name,
    'origin': origin,
    'invoice_id': invoice_id,
    'uos_id': uos_id,
    'product_id': move_line.product_id.id,
    'account_id': account_id,
    'price_unit': price_unit,
    'discount': discount,
    'quantity': move_line.product_uos_qty or move_line.product_qty,
    'invoice_line_tax_id': [(6, 0, tax_ids)],
    'account_analytic_id': account_analytic_id,
    }, context=context)
self._invoice_line_hook(cursor, user, move_line, invoice_line_id)

los invoice_line_tax_id el campo es una relación de muchos a muchos, y la (6, 0, tax_ids) significa reemplazar cualquier registro existente con aquellos en tax_ids. Porque estas llamando create(), no hay nada que reemplazar.

Una lista completa de opciones está en el documentación para la clase OSV.

Para un campo de Many2Many, se espera una lista de tuplas. Aquí está la lista de tupla que se aceptan, con la semántica correspondiente

(0, 0, { values }) Enlace a un nuevo registro que debe crearse con el diccionario de valores dado

(1, ID, { values }) Actualizar el registro vinculado con id = id (escribir valores en eso)

(2, ID) Elimine y elimine el registro vinculado con id = id (llame a Unlink en ID, que eliminará el objeto por completo, y el enlace también)

(3, ID) Corte el enlace al registro vinculado con id = id (elimine la relación entre los dos objetos pero no elimina el objeto de destino en sí)

(4, ID) Enlace al registro existente con id = id (agrega una relación)

(5) Deslice todos (como usar (3, ID) para todos los registros vinculados)

(6, 0, [IDs]) Reemplace la lista de IDS vinculados (como usar (5) y luego (4, ID) para cada ID en la lista de IDS)

Otros consejos

def list_customers(self, cr, uid, ids, context):
    sale_obj = self.pool.get('sale.order')
    for sale in self.browse(cr, uid, ids, context):
        sale_ids = sale_obj.search(cr, uid, [('div_code_id','=',sale.div_code_id.id),('project_user','=',sale.project_id.id),('tower_id','=',sale.tower_id.id)])
        ids_cus = []
        for cus in sale_obj.browse(cr, uid, sale_ids, context):
            if cus.partner_id.id not in ids_cus:
                ids_cus.append(cus.partner_id.id)
        self.write(cr, uid, ids, {'state_readonly':'listed','customer_ids': [(6, 0, ids_cus)]})
    return True

Puede insertar valores en una tabla de relaciones de muchos a muchos en Openerp, por favor, mire el ejemplo anterior

Cuando creamos el campo Many2Many, usamos esta sintaxis:

'field_name':fields.many2many('Module_name','relation_name','self_id','module_name_id','string', 

Ahora necesita insertar en esta relación ejecutando consultas como:

 $ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)

Simplemente coloque su campo Many2Many a la vista (archivo XML) y después de ejecutar su módulo puede ver Many2Many Field para insertar registros en su GUI

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top