Skip to content

Instantly share code, notes, and snippets.

@vijoin
Last active June 26, 2019 09:18
Show Gist options
  • Save vijoin/b370e68a06d89af5b354 to your computer and use it in GitHub Desktop.
Save vijoin/b370e68a06d89af5b354 to your computer and use it in GitHub Desktop.
Extendiendo _rec_name con el método name_get (Odoo/OpenERP)

#Extendiendo las funcionalidades del atributo _rec_name con el método name_get

Es muy común que tengamos un objeto persona, trabajador, etc, relacionado a un ser humano, el cual tiene (normalmente) dos nombres y dos apellidos. En alguno casos, definimos solo un campo nombres y otro apellidos, nunca se recomienda un solo campo para almacenar todo eso.

En odoo, al recuperar el un registro de un objeto, por ejemplo, al crear un proyecto asignarle un(os) activista(s), el campo Many2one nos traería por defecto el valor del campo 'name', y en caso de no tener ese campo usamos el atributo _rec_name para definir otro campo, por ejemplo: 'nombres'.

Pero esto trae un inconveniente, que al mostrar en la lista desplegable, no nos basta con los nombres solamente; necesitamos los nombres y los apellidos. Para solucionar eso, definimos el método name_get

Ej:

class Activista(models.Model):
    """Registro de Activista de Bachaco-ve"""
    _name = 'activista'
    _rec_name = 'nombres'
    nombres = fields.Char(size=30,required=True, help='Nombre del Activista')
    apellidos = fields.Char(size=30,required=True, help='Apellidos del Activista')
    cedula = fields.Char('Cédula',size=8,required=True, help='Cédula del Activista')
    #...

def name_get(self, cr, uid, ids, context=None):
    res = []
    activistas = self.browse(cr, uid, ids, context)
    for activista in activistas:
        res.append((activista.id, activista.nombres + ' ' + activista.apellidos))
    return res

En este ejemplo observamos cómo definimos el método name_get con los argumentos necesarios. Luego declaramos una lista vacía, el cual retornará un par de valores (id, valor). Seguidamente instanciamos un objeto 'activistas' el cual contiene todos los registros. Luego iteramos sobre este objeto en un nuevo elemento llamado 'activista'. La acción a ejecutar será añadir a las lista 'res' dos elementos: el id del activista y la concatenación del campo nombres con apellidos incorporando un espacio en blanco entre ambos valores. Finalmente se retorna la lista res.

Entonces veremos que al usar este objeto en una relación Many2one obtendremos el nombre completo. Lo que hemos hecho es montarnos sobre el atributo _rec_name. Todas las propiedas aplicables a ese atributo, ahora son reemplazadas por nuestra función. Nota: fíjense cómo al revisar un elemento en la vista formulario, nos muestra el nombre completo.

Ejemplo de código AQUI

Nota: es importante destacar que el campo definido en en el atributo _rec_name seguirá siendo utilizado para las búsquedas tanto en el search de la vista tree como con los campos Many2one dentro de una vista form

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment