Conceptos básicos de desarrollo de Odoo, artículo n.° 3: Agregar un nuevo modelo usando el modo de desarrollador

Abril 5, 2022
23 min read
Conceptos básicos de desarrollo de Odoo, artículo n.° 3: Agregar un nuevo modelo usando el modo de desarrollador

La tercera de cuatro entregas sobre el uso del modo desarrollador de Odoo.

Cubierto en este artículo:

  • Cómo crear un nuevo modelo
  • Cómo crear elementos de menú y acciones
  • Cómo configurar la seguridad del control de acceso
  • Usar el superusuario de forma responsable

Construyendo el siguiente nivel de complejidad para nuestra aplicación Odoo To-do

En el artículo anterior, nos familiarizamos con cómo agregar un campo personalizado usando el modo de desarrollador. Ahora, utilizando el conocimiento que hemos acumulado a lo largo de los últimos artículos, agregaremos otro nivel de complejidad a nuestro conocimiento de desarrollo de Odoo al presentar cómo crear un nuevo modelo y ponerlo a disposición de los usuarios.

Después de leer este artículo, comprenderá los pormenores de agregar un modelo a nuestra aplicación Odoo To-do, así como también cómo navegar e implementar varias restricciones de seguridad para los usuarios a quienes se les ha otorgado acceso.

Creando un nuevo modelo usando el modo desarrollador de Odoo

Los modelos son los componentes básicos de las aplicaciones y proporcionan las estructuras de datos y el almacenamiento que se utilizarán. Crearemos el modelo para las tareas pendientes utilizando tres campos clave:

  • Texto de descripción.
  • ¿Está hecho? bandera.
  • Equipo de Trabajo (Un listado de personas que colaboran en este ítem).

Los nombres de los modelos deben usar la forma singular, por lo que el nuevo modelo debe llamarse Elemento de tarea pendiente. El nombre técnico del modelo debe ser un identificador de objeto de base de datos válido, por lo que solo debemos usar letras y guiones bajos y evitar todos los demás símbolos. Dado que los modelos creados a través del menú Técnico deben tener un prefijo x_, el nombre técnico del nuevo modelo será x_todo_item.

Se accede a las definiciones de modelo en la aplicación Configuración, en Técnico | Estructura de la base de datos | Menú de modelos.

Para crear un nuevo modelo, vaya a la lista de Modelos y haga clic en el botón Crear:

1. Complete los valores de definición básicos: Utilice elemento de tarea pendiente para la descripción del modelo y x_todo_item para el modelo.

2. De forma predeterminada, el modelo incluirá el campo x_name en la lista de campos. Es Título cuando representa el registro en listas o cuando está referenciado en otros registros. Se puede utilizar para el título del elemento pendiente, así que edítelo para cambiar la columna Etiqueta de campo en consecuencia.

3. A continuación, agregue ¿Está listo? Campo. Esto debería ser sencillo. Vaya a la lista de Campos y haga clic en Agregar una línea para abrir el formulario de nuevo campo. Introduzca estos valores:

  • Nombre de campo: x_is_done
  • Etiqueta de campo: ¿Está listo?
  • Tipo de campo: booleano

Una vez que haya ingresado los valores, haga clic en el botón guardar y cerrar y luego haga clic en guardar en el formulario del modelo.

Creating a new model using the Odoo developer mode

4. A continuación agregaremos el campo Equipo de trabajo, que puede resultar un poco más desafiante. No solo es un campo de relación, que se refiere a registros en el modelo Contactos ( res.partner ), sino que también es un campo de selección de valores múltiples.

Afortunadamente, Odoo soporta relaciones de muchos a muchos. Este es el caso aquí, ya que una tarea pendiente puede estar relacionada con muchos contactos, y cada contacto puede estar relacionado con muchas tareas pendientes.

Agregar un campo Equipo de trabajo

Para agregar el campo Equipo de trabajo, vaya a la lista Campos y haga clic en el botón Editar del formulario. Luego haga clic en Agregar una línea para abrir el formulario de nuevo campo. Una vez que lo hayas hecho, ingresa estos valores:

  • Nombre de campo: x_work_team_ids
  • Etiqueta de campo: Equipo de trabajo
  • Tipo de campo: muchos2muchos
  • Modelo relacionado: res.partner
  • Dominio: [('x_is_work_team', '=', Verdadero)]

Los campos de muchos a muchos tienen algunas propiedades base específicas: tabla de relaciones, columna 1 y columna 2. Estas se completan automáticamente y los valores predeterminados son buenos para la mayoría de los casos. Estas propiedades se analizan con más detalle en Capítulo 6 de Odoo 15 Fundamentos del desarrollo, "Modelos: estructuración de los datos de la aplicación".

El atributo de dominio es opcional y define un filtro para los registros que se presentarán. Lo estamos usando aquí para limitar los contactos seleccionables a aquellos que tienen marcada la bandera Es equipo de trabajo. De lo contrario, todos los contactos estarán disponibles para su selección.

La expresión de dominio a usar sigue una sintaxis específica de Odoo: es una lista de tripletes, donde cada triplete es una condición de filtro que indica el nombre del campo a filtrar, el operador de filtro a usar y el valor por el que filtrar. Se proporciona una explicación detallada de las expresiones de dominio en Capítulo 7 de Odoo 15 Fundamentos del desarrollo, “Conjuntos de registros: trabajar con datos de modelo”.

Consejo:

  • Odoo tiene un asistente de filtro de dominio interactivo que puede usarse como ayuda para generar expresiones de dominio. Para usarlo, seleccione la opción de menú Configuración | Técnico | Interfaz de usuario | Filtros definidos por el usuario. Una vez que se selecciona un modelo de destino en el formulario, el campo Dominio mostrará un botón +Agregar filtro para agregar condiciones de filtro. Al hacerlo, el cuadro de texto debajo mostrará dinámicamente el código de expresión de dominio correspondiente. 

Cuando termine, haga clic en el botón Guardar formulario modelo. Una vez que se crea el nuevo modelo, se agregan algunos campos automáticamente. El ORM los incluye en todos los Modelos y pueden resultar útiles para fines de auditoría:

Adding a work team field

En este punto, ahora tenemos el modelo subyacente para la aplicación To-do, pero los usuarios aún no pueden acceder a él. En la siguiente sección, aprenderemos cómo configurar la seguridad del control de acceso.

Crear elementos de menú y acciones en el desarrollador de Odoo

Ahora que tenemos un modelo para almacenar las tareas pendientes, debemos ponerlo a disposición en la interfaz de usuario. Esto se hace agregando elementos de menú a la interfaz de usuario.

Crearemos un elemento de menú de nivel superior que abre directamente la lista de tareas pendientes. Algunas aplicaciones, como Contactos, funcionan así, mientras que otras tienen elementos de submenú como se muestra en la barra superior.

Las definiciones del menú se encuentran en la aplicación Configuración, Técnico | Interfaz de usuario | Opción de elementos del menú:

Creating menu items and actions in the Odoo developer

Navegue hasta allí, haga clic en Crear e ingrese los siguientes valores:

  • Menú: Tareas pendientes
  • Menú principal: (vacío)
  • Acción: seleccione la opción ir.actions.act_window.
  • En el cuadro de selección al lado del campo Acción, escriba Elementos pendientes y seleccione Crear y editar... Esto abrirá un formulario Crear: Acción.

En el formulario Crear: Acción, establezca los siguientes valores:

  • Nombre de la acción: Tareas pendientes
  • Objeto de ID externo: x_todo_item (el nombre técnico del modelo de destino).
  • En este punto, la definición de Acción debería verse así:
Set values in the Create: Action

Guarde el formulario de acción y luego guarde el formulario Elementos del menú. Una vez que lo hayas hecho, el elemento del menú de la aplicación Tareas casi estará listo para usarse.

Los cambios en los menús requieren una recarga completa de la página del navegador para ser visibles. En la mayoría de los navegadores, el F5 La clave se puede utilizar para esto. Pero si intentamos eso ahora, no podremos ver la opción del menú Tareas pendientes porque nuestro usuario aún no ha tenido acceso a ella.

 

La seguridad de acceso debe configurarse antes de permitir que el elemento del menú se presente a los usuarios. Repasaremos la última sección de este artículo, pero antes de entrar en eso, vale la pena analizar algunos detalles más sobre las acciones de ventana.

Comprender las acciones de la ventana

En nuestro caso, agregamos una acción directamente a un elemento del menú de nivel superior, sin elementos del menú secundario. Sin embargo, los menús pueden ser un árbol de elementos de menú, con relaciones padre/hijo. Los elementos del menú hoja tienen una relación acción, definiendo qué sucede cuando se selecciona. Este nombre de la acción es lo que se utilizará como título de las vistas presentadas.

Hay varios tipos de acciones disponibles, y las más importantes son Ventana, Informes y Acciones del servidor. Acciones de ventana son las más frecuentes y se utilizan para presentar vistas en el cliente web. Las acciones de informe se utilizan para ejecutar informes y las acciones del servidor se utilizan para definir tareas automatizadas.

En este punto, nos ocupamos de las acciones de ventana que se utilizan para mostrar vistas. El elemento de menú recién creado para el elemento de tareas pendientes utiliza una acción de ventana que se creó directamente desde el formulario Elemento de menú. También podemos verlo y editarlo desde Configuración | Técnico | Opciones del menú de acciones. En este caso particular nos interesa la opción del menú de acciones de la ventana.

Consejo:

  • En muchos casos, es más conveniente usar la opción Editar acción en el menú Herramientas de desarrollador, que proporciona un acceso directo conveniente para editar la acción de ventana que se usó para acceder a la vista actual.

Configurar la seguridad del control de acceso

Odoo incluye mecanismos de control de acceso integrados. Un usuario solo podrá utilizar las funciones a las que se le concedió acceso. Esto significa que los usuarios aún no pueden acceder al modelo de tareas pendientes que creamos.

El usuario administrador antes de Odoo 12

El usuario administrador ahora está sujeto a control de acceso como cualquier otro usuario. En versiones anteriores de Odoo, el usuario administrador era especial y pasaba por alto las reglas de seguridad. Esto ya no es cierto y se deben otorgar privilegios de acceso al administrador para poder acceder a los datos del modelo.

Uso de grupos para definir la seguridad de acceso

La seguridad del acceso se define mediante grupos de usuarios. Un grupo define permisos de acceso a los modelos, a veces llamado lista de control de acceso (ACL). Los usuarios pertenecen a grupos. Entonces, el acceso de cada usuario depende de los grupos a los que pertenece.

En este punto, queremos crear un grupo de tareas pendientes para asignarlo a los usuarios que deberían tener acceso a esta función. También podemos definir reglas de registro, a veces denominadas seguridad a nivel de fila, que restringen los registros a los que puede acceder cada usuario.

Para nuestro proyecto, queremos que las tareas pendientes sean privadas para cada usuario, por lo que los usuarios solo deberían poder acceder a los registros que ellos mismos crean.

Grupos de seguridad

El control de acceso se basa en grupos. Un grupo de seguridad recibe privilegios de acceso a los modelos, que es lo que determina los elementos del menú disponibles para los usuarios que pertenecen a ese grupo. Para un control más detallado, también podemos dar acceso a elementos de menú, vistas, campos e incluso registros de datos específicos, con reglas de registro, que se explican en la siguiente sección.

 

Los grupos de seguridad también están organizados en torno a aplicaciones. Normalmente, cada aplicación proporciona al menos dos grupos:

  1. Usuario: capaz de realizar las tareas diarias.
  2. Administrador: capaz de realizar todas las configuraciones para esa aplicación.
Cómo crear un nuevo grupo de seguridad para nuestra aplicación Odoo To-do

En el menú superior Configuración, navegue hasta Usuarios y empresas | Grupos y cree un nuevo registro utilizando los siguientes valores:

  • Aplicación: dejar vacío
  • Nombre: Usuario de tareas pendientes
  • Pestaña Heredado: agregue una línea y seleccione Tipos de usuario / Usuario interno

Así es como debería verse:

How to create a new security group for our Odoo To-do app

Nuestro grupo de seguridad hereda el grupo de usuarios internos. La herencia de grupo significa que los miembros de este grupo también serán miembros de los grupos heredados y acumularán los permisos otorgados a todos ellos. El usuario interno es el grupo de acceso básico y los grupos de seguridad de aplicaciones normalmente lo heredan.

El grupo de Usuarios Internos antes de Odoo 12

Antes de Odoo 12, el grupo de Usuarios Internos se llamaba Empleado. Esto fue solo un cambio cosmético y el identificador técnico (XML Id) sigue siendo el mismo que en versiones anteriores: base.group_user.

Listas de control de acceso de seguridadrol lists

Ahora podemos otorgar al grupo/usuario de tareas pendientes acceso a modelos específicos.

 

La forma más sencilla de hacerlo es utilizar la pestaña de derechos de acceso en el formulario de grupos. Agregue una línea allí usando estos valores:

  • Nombre: Acceso de usuario a tareas pendientes
  • Objeto: seleccione elemento de tarea pendiente de la lista
  • Marque todas estas casillas para otorgar sus privilegios correspondientes: acceso de lectura, acceso de escritura, acceso de creación y acceso de eliminación.

Estos modelos de ACL se gestionan desde el Área Técnica | Seguridad | Elemento de menú Derechos de acceso.

Tenga en cuenta que no necesitamos agregar acceso específicamente al modelo de socio, ya que heredamos el grupo de usuarios internos que ya otorga acceso a él.

Asignar grupos de seguridad a los usuarios

En este punto podemos probar estas nuevas configuraciones de seguridad, agregando el usuario administrador a este nuevo grupo de seguridad:

1. Seleccione Usuarios y Empresas | Elemento del menú Usuarios, abra el formulario de usuario de administrador de Mitchell y Editar.

2. En la pestaña Derechos de acceso, sección Otros, marque la casilla Usuario de tareas pendientes para habilitar el grupo de seguridad para este usuario. Selecciónelo y guarde el formulario.

Enable the security group for the user

Si todo salió como se esperaba, debería poder ver el menú superior de la aplicación Tareas pendientes. Vuelva a cargar la página del navegador para forzar una actualización de los elementos del menú.

Aún no hemos creado ninguna vista, pero el marco de trabajo de Odoo generará automáticamente algunas vistas básicas para nosotros:

Basic views

Reglas de registro de seguridad

Cuando se les da acceso a un modelo, los usuarios podrán acceder a todos sus registros de forma predeterminada. Pero en algunos casos, es posible que necesitemos restringir a qué registros puede acceder cada usuario. Esto se puede hacer usando reglas de registro.

Las reglas de registro establecen filtros de dominio en los modelos que se aplican cuando se realizan operaciones de lectura o escritura en ellos.

 

 

  • Los registros tienen un crear_uid campo agregado automáticamente por el marco, que almacena el usuario que creó el registro. Entonces podemos usarlo para saber quién es el propietario de cada registro.
  • El contexto de evaluación del dominio incluye una variable de usuario que contiene un registro de exploración para el usuario actual. Entonces podemos usar notación de puntos para acceder a sus atributos, como el usuario.id.

Podemos usar esto en una expresión de dominio para lograr nuestro objetivo:

[('create_uid', '=', usuario.id)]

Las reglas de registro están disponibles en Configuración | Técnico | Seguridad | Menú Reglas de registro, o en la opción del menú de desarrollador Ver reglas de registro. Navegue hasta allí y cree una nueva regla de registro con los siguientes valores:

  • Nombre: un título descriptivo, como Tareas pendientes del usuario.
  • Modelo: seleccione el modelo de la lista, elemento pendiente en nuestro caso.
  • Derechos de Acceso: Las acciones donde se aplicará la regla. Manténgalos todos controlados.
  • Definición de regla (filtro de dominio): [('create_uid', '=', usuario.id)]
  • Grupos: Los grupos de seguridad a los que se aplica. Haga clic en Agregar una línea y seleccione el grupo Usuario de tareas pendientes.

Así es como se verá la definición de reglas de registro:

Creating record rules

Y hemos terminado. Ahora puede probar esta nueva regla creando un par de tareas pendientes con los usuarios Administrador y Demo. Cada uno debería poder ver sólo sus propios elementos.

Comprender la cuenta de superusuario

Odoo incluye un superusuario interno similar a root que tiene privilegios especiales y puede eludir los controles de seguridad. Se utiliza para operaciones internas o acciones que necesitan ignorar los controles de seguridad. Este superusuario se llama OdooBot y se genera automáticamente al crear la base de datos y tiene el ID de base de datos 1.

El usuario administrador predeterminado antes de Odoo 12

Antes de Odoo 12, el usuario administrador predeterminado utilizado para la configuración del sistema también era el superusuario. Esto significa que el administrador omitió el control de acceso de forma predeterminada. Sin embargo, esto ya no es el caso. Después de Odoo 12, el administrador predeterminado es un usuario normal, pero está configurado de forma predeterminada como Administrador en todas las aplicaciones de Odoo.

Usar el superusuario de forma responsable

El superusuario no tiene contraseña de inicio de sesión, pero es posible habilitarla. Cuando inicia sesión como usuario con el grupo Admin \ Configuración, la opción convertirse en superusuario está disponible en el menú Desarrollador.

También es posible entrar directamente en modo superusuario en la pantalla de inicio de sesión. Para esto necesita habilitar el modo desarrollador, editando la URL para agregar ?debug=1 (por ejemplo, http://localhost:8069/web/login?debug=1). Luego, la opción Iniciar sesión como superusuario estará disponible debajo del botón Iniciar sesión.

Cuando el superusuario está habilitado, el usuario actual se muestra como OdooBot en la esquina superior derecha. Tenga en cuenta que los colores en el área superior derecha cambian a franjas amarillas y negras cuando el superusuario está habilitado.

Precaución:

  • El uso del superusuario sólo debe realizarse si es absolutamente necesario. El hecho de que el superusuario eluda la seguridad de acceso puede provocar incoherencias en los datos. Por ejemplo, en un contexto de varias empresas, el superusuario podría potencialmente comprometer la integridad de los datos compartidos. Si es posible, se debe evitar el uso del superusuario.

Preparándonos para el paso final de nuestra serie de desarrollo de Odoo

En este punto de nuestra exploración del modo de desarrollador de Odoo, hemos cubierto elementos como la estructura de la arquitectura de Odoo, cómo habilitar el modo de desarrollador, cómo agregar un campo personalizado a un modelo y cómo crear un modelo nuevo usando el modo desarrollador.

Para nuestro último espacio en esta serie de cuatro partes, describiremos los pasos necesarios para agregar y crear diferentes tipos de vistas. Esto efectivamente cerrará nuestro proyecto de aplicación de tareas pendientes, pero siempre hay mucha más información para perfeccionar sus habilidades de desarrollo de Odoo cuando se sumerge de lleno en la fuente de la experiencia en desarrollo de Odoo de estos artículos: Odoo 15 Development Essentials.

 

Esté atento a la cuarta y última entrega próximamente.

Image
Daniel

Sobre el autor

Daniel es un profesional de TI experimentado con amplia experiencia en la implementación de aplicaciones comerciales en una amplia gama de sectores. Ha trabajado con Odoo desde 2010, cuando se conocía como Open ERP, y se desempeña como miembro de la junta directiva de la Odoo Community Association (OCA). Daniel es el director general de Open Source Integrators.

Share this post