Skip to content
Victor Inojosa edited this page Sep 11, 2015 · 4 revisions

Desactivar las opciones de Crear "foo" y Crear y Editar de un Many2one

tomado de: http://ludwiktrammer.github.io/odoo/form-widgets-many2one-fields-options-odoo.html

Opciones:

  • no_quick_create - remueve la opción Crear y Editar
  • no_create_edit - remueve la opción Crear "foo"
  • no_create - no_quick_create y no_create_edit combinados.
  • no_open - en modo lectura: no lo muestra como un enlace.

Ejemplo:

<field name="field_name" options="{'no_quick_create': True, 'no_create_edit': True}"/>


Sobreescribir el _rec_name usando name_get

Utilidad principial: Concatenar 2 campos para mostrarlos en un many2one

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 registro de un objeto, por ejemplo: al crear un proyecto y 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'.

ej: _rec_name = '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 juntos. Para solucionar eso, definimos el método name_get

Ej:

    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, la cual retornará un par de valores (id, valor). Seguidamente instanciamos un objeto 'activistas' el cual contiene el recordset con todos los registros activos del modelo activista. Luego iteramos sobre este objeto en un nuevo objeto 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 el método 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.