Método name_get en OpenERP (Odoo)

El método name_get base del sistema devuelve el nombre de un registro, generalmente, todos los objetos o tablas creadas en la base de datos de OpenERP (Odoo), tienen un campo llamado name, el cual es tomado por el sistema como campo clave y único en la mayoría de los casos.

Para cambiar el retorno de un nombre por algún otro valor adicional o un compuesto de dos campos diferentes, podemos alterar el método name_get, un ejemplo sencillo sería:

def name_get(self, cr, uid, ids, context=None):
    if isinstance(ids, (list, tuple)) and not len(ids):
        return []
    if isinstance(ids, (long, int)):
        ids = [ids]
    reads = self.read(cr, uid, ids, ['name', 'code'], context=context)
    res = []
    for record in reads:
        name = record['name']
        code = record['code']
        if code:
            name = code
        res.append((record['id'], name))
    return res

En el ejemplo se están tomando como campos principales el name y el code, estos campos pueden ir concatenados o simplemente se reemplaza el name por el code para que code sea el retorno del valor que se mostrará en la vista del sistema.

Aquí se maneja la necesidad del requerimiento para lo que se desea devolver como valor de nombre de un registro.

Advertisements

About felixurbina

Humano con todos los defectos y virtudes que vienen de fábrica.
This entry was posted in Odoo, OpenERP, Python. Bookmark the permalink.

8 Responses to Método name_get en OpenERP (Odoo)

  1. Francisco says:

    Esta funcion e pone en la clase donde queremos cambiar el el retorno del valor name?? Porque la copie y la pegue en mi clase, cambiando el atribute code por otro atributo propio de mi clase y me genera error.

  2. jmrv1981 says:

    buenas tardes estimado, quiero traer al sale.order.form el campo vat de res.partner, con el fin de mostrar la informacion almacenada en dicho campo e incluso poder hacer busquedas por ese campo y poder traer los datos del cliente. No he podido hacerlo como quiero, acá copio el código que estoy incluyendo en el .py
    ‘rut’: fields.related(‘vat’, ‘rut’, type=”many2one”, relation=”res.partner”, string=”RUT”, states={‘draft’: [(‘readonly’, False)], ‘sent’: [(‘readonly’, False)]}, required=True, track_visibility=’always’),

    Estimado aprovecho igual para consultarte, ya que dentro de mes y medio, se va a necesitar freelancers para un proyecto odoo. El frontend se va a manejar con Angular js, html 5, pero se quiere usar odoo en el backend, utilizar la base de datos de postgress, y pasar los datos con el webservice api de ODOO con el uso de json. Si es de tu interés o tienes algún conocido que le interese, me puedes notificar a jmrv1981@hotmail.com, este tambien es mi skype y mi hangout es jmrv1981pzo@gmail.com. El pago se realizará en $, a través de paypal o se transfiere en BS a un cambio con unos puntos por debajo del paralelo.

    • felixurbina says:

      Hola qué tal, en la consulta OpenERP/Odoo, pudieras cambiar el tipo de campo, en lugar de usar related, puedes usar function, algo parecido a lo que te dejé acá: http://pastebin.com/G5P4Mh47

      Respecto a lo del trabajo, déjame consultar a unos amigos, ahorita fuera de oficina no tengo Internet y dentro no tengo mucho tiempo, no quisiera quedar mal, aunque suena interesante.

      Saludos.

  3. Juan says:

    Buena explicación veras felix requiero tu orientación pues estoy diseñando un softhware OPENERP para una empresa pero ellos ameritan que al loguearse el usuario este se muestre en todas las vistas .xml no se como empezar a plantearme esto si me pudieras referir algun material ? algo con lo que me pudiera orientar mi correo: carrasqueljuanf@gmail.com

    • felixurbina says:

      Qué tal Juan, no entendí un poco tu enunciado, ¿quieres que el nombre de usuario se muestre en todos los .xml?

      Saludos.

      • Muchas gracias por atenderme compañero, muy agradecido, resolví el problema con un:
        @api.onchange(‘valor 1′,’valor 2’)
        def nombre_de_la_funcion (self):
        self.valor 1= self.valor 2
        En la variable se llama la fucion para obtener el resultado.Por otra parte, Si pudieras responderme una nueva duda, con respecto a la función que planteas en el blog, te lo presento así para mejor entendimiento por ejemplo:
        Tengo la tabla ‘pieces’, en esta tabla existe un campo llamado ‘vkg’ de tipo ‘float’. este valor resultante de un calculo en la vista pieces.xml quiero mostrarlo en otra clase llamada ‘income’ en otra vista llamada ‘income.xml’.
        Mi problema es, que son dos clases diferentes, como tomo el valor de ese campo resultante en una clase y lo muestro en otra vista de la otra clase?
        ¿Tu función pudiera ser adaptada a solventar este problema?

  4. Juan says:

    Un saludo Felix, gracias por tu atención, sobre mi duda, pude lograr resolverla utilizando : un api onchange, el cual utilice de la siguiente manera
    @api.onchange(‘issued_by’)
    def extra_log(self):
    self.issued_by1 = self.issued_by
    self.issued_by2 = self.issued_by
    self.issued_by3 = self.issued_by
    self.issued_by4 = self.issued_by
    Donde iddued_by va a ser la variable de entrada donde el usuario colocará su respectivo nombre como firma, e issued_by 1,2,3…., van a ser los campo correspondientes a las vistas donde se repetirá el usuario introducido.
    Sin embargo, Felix podría recibir sugerencias, te planteo otra pregunta ¿Tengo una clase donde realizo cálculos matemáticos, cuyos valores son tipo float, una vez guardados estos cálculos los muestro desde vista ‘form’ en otra clase llamada ‘pickup’ con un one2many, mostrándome una vista ‘tree’ con todos estos datos calculados, el caso está en que, yo quisiera mostrar tres valores de este calculo, en otra clase llamada ‘charged’ pero nó como una vista ‘tree’ sino como un valor que se debe observa desde un campo en una vista ‘form’, otro detalle, es que este valor esta en la base de datos como acceder a ese valor y extraerlo y mostrarlo de la manera que se requiere, la función name_get que planteas podría realizarme por ejemplo esta extracción de 3 campos en bases de datos y pudiera mostrarlos en mi vista form?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s