2012-02-21 65 views

Respuesta

35

He aquí un ejemplo de la stock module:

  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) 

El campo invoice_line_tax_id es una relación de muchos a muchos, y la (6, 0, tax_ids) significa para reemplazar los registros existentes con los de tax_ids. Como llamas al create(), no hay nada para reemplazar.

Una lista completa de opciones se encuentra en el documentation for the osv class.

Para un campo many2many, se espera una lista de tuplas. Aquí está la lista de tuplas que son aceptados, con la semántica correspondientes

(0, 0, { values }) enlace a un nuevo registro que necesita ser creada con los valores dados Diccionario

(1, ID, { values }) actualización del registro vinculado con id = ID (escribe valores en él)

(2, ID) remover y eliminar el registro vinculado con id = ID (Identificación de llamadas en desvincular, que se elimine el objeto por completo, y el enlace a ella también)

(3, ID) cortar el vínculo con el registro vinculado con id = ID (eliminar 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) desvincule todas (como el uso de (3, ID) para todos los registros vinculados)

(6, 0, [IDs]) reemplazar la lista de ID de enlaces (como el uso de (5) a continuación (4, ID) para cada ID en la lista de IDs)

+0

Pero no conozco el nombre del objeto de la tabla many2many rel ... Eso significa que puedo ver esa tabla de dos columnas en la base de datos, pero no sé cómo obtenerla a través de http.request. registro[]. ¿Sabes cómo? –

0

acaba de poner su campo Many2Many a la vista (archivo XML) y después de ejecutar el módulo se puede ver el campo Many2Many para insertar registros en su interfaz gráfica de usuario

+0

¿podemos agregar la lista al parámetro vals en 'create (self, cr, user, vals, context = None):' para insertar múltiples registros a la vez.? –

7
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 un muchos-a-muchos tabla de relación de OpenERP, busque en el ejemplo anterior

2

Cuando creamos el campo Many2Many a continuación, utiliza la siguiente sintaxis:

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

Ahora u necesidad de insertar en esta relación por ejecutar consultas como:

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