-
Notifications
You must be signed in to change notification settings - Fork 13
Snippets Odoo
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
yno_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}"/>
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.