Seleccionar página

Copia parcial de un elemento de forma elegante en openerp

por | Mar 6, 2014 | OpenERP, Python

A veces podemos querer copiar sólo parte de un objeto a otro, y podemos encontrarnos con estructuras con bucles anidados, que no nos permiten aprovechar toda la potencia de los objetos de openerp, quedan poco elegantes y poco mantenibles.

Un objeto en OpenERP tiene la capacidad de exportar sus datos, con el método export_data. A este método le podemos pasar una lista de campos queremos exportar. Tenemos que tener en cuenta que el resultado lo devuelve de una forma un tanto extraña, en un diccionario de un solo elemento, de este estilo:

{ 
    "data": [
        ["valor_campo1", "valor_campo2"],
        ["valor_campo1", "valor_campo2"],
    ]
}

 

Para crear un objeto con los datos que hemos extraido, necesitamos convertirlos en un diccionario. Para esto vamos a haber guardado inicialmente la lista (en una lista) de elementos a exportar, con la cual llamaremos a la función to_export, para posteriormente poder utilizar la función zip. Esta función nos devolverá en base a dos listas un diccionario.

 

    zip([ clave1, clave2 ], [valor1, valor2]  )

Nos devolverá

{
    clave1 : valor1,
    clave2 : valor2
}

Normalmente querremos asociar a este nuevo objeto otros valores, que no hayan salido de ese modelo, para esto utilizamos el método update de un diccionario.

def on_action(self, cr, uid, ids, context=None):
    to_export = [
        'field1', 'field2', 'field3', 'field4',
    ]
    result = []
    item = {
        "state" : "copied"
    }

    object = self.browse(cr, uid, ids, context=context)

    item.update(dict(zip(
        to_export,
        object.export_data(to_export)['datas'][0])))
    self.pool.get('our_object').create(cr, uid, item)

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Blog de Neodoo Microsystems
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles. Puedes encontrar más información en nuestra Política de privacidad y Política de cookies.