Ir al contenido

Como crear un modulo personalizado en Odoo 19

Tutorial para crear un modulo en odoo 19
28 de noviembre de 2025 por
Miguel Angel Gonzalez Ramírez

Introduccion

Odoo 19 es una de las plataformas empresariales más completas y flexibles disponibles hoy en día. Su arquitectura modular permite agregar funcionalidades nuevas, personalizar procesos o integrar servicios externos a través de módulos desarrollados a la medida.

A continuación encontrarás una guía clara y práctica para crear tu primer módulo en Odoo 19, comprender su estructura y comenzar a extender la plataforma de forma profesional.


¿Qué es un módulo en Odoo 19 y para qué sirve?

Un módulo en Odoo es una pieza de software que agrega o modifica funcionalidades dentro del sistema. Puede ser tan simple como un nuevo modelo de datos o tan complejo como una aplicación completa de contabilidad o inventario.

Con un módulo puedes:

  • Crear nuevas pantallas y menús.

  • Añadir lógica de negocio.

  • Integrar servicios externos (SAT, bancos, APIs, etc.).

  • Personalizar vistas y reportes.

  • Adaptar procesos al marco fiscal mexicano.

Esto permite que las empresas utilicen Odoo totalmente alineado con sus propias necesidades, sin depender de funcionalidades genéricas.


Estructura basica de un modulo

Un modulo reside en un directorio del sistema de archivos que tiene la siguiente estructura

mymodule/ ├── __init__.py ├── __manifest__.py ├── models/ │   ├── __init__.py │   └── Mymodel.py ├── views/ │   └── menu.xml │   └── actions.xml └── security/      └── ir.model.access.csv


Crear un directorio para el modulo.

Vamos a crear un directorio dentro del directorio de addons. El directorio de addons puede ser establecido utilizando la bandera --addons-path

mkdir mymodule


Crear archivos clave

Debemos incluir el manifesto del modulo y el archivo init dentro del directorio de nuestro modulo. El manifesto debe contener las siguientes llaves:
  1. - name: Nombre que aparece en pantalla
  2. - license: Tipo de licencia del modulo
  3. - description: Breve descripcion que aparece en pantall del modulo
  4. - depends: Arreglo de dependencias, indispensable poner 'base' como primera dependencia
  5. - application: Booleano que define el modulo como aplicacion, mas que nada para filtrado en odoo apps
  6. - data: Arreglo con los paths de los archivos de datos, el sistema reconoce de manera automatica que hace cada uno, solo es importante seguir la convencion de nombres establecida por odoo
Ejemplo de archivo:
{     'name': 'Test Module',     'license': 'AGPL-3',     'description': 'Hello odoo modules',     'depends': ['base'],     'application': True,     'data':['views/menu.xml', 'views/actions.xml'] }
A partir de que ponemos el manifesto, nuestro modulo va a ser reconocido por el sistema, ojo tambien debe de estar el archivo __init__.py aunque este vacio para que sea un modulo valido

Tip: Para probar que funciona podemos poner el modulo en un directorio de addons independiente, si el servidor no marca errores entonces el modulo es valido y vamos a poder encontrarlo en el catalogo de apps


Activar el modo de depuracion

Agregar el siguiente parametro en la URL de nuestro navegador
?debug=1


Actualizar la lista de apps

Desde la interfaz de usuario debemos de actualizar la lista de apps para que neustra app sea mostrada.

Apps > Actualizar lista de aplicaciones


Crear modelos

Vamos a crear un modelo en el directorio de models, un modelo corresponde con una clase que hereda el modelo models.Model, el modelo puede tener campos utilizando fields
from odoo import models,fields class MyModel(models.Model):     _name: 'mymodel.mymodel'     name = fields.Char()
Nota: para que se refleje en la base de datos debemos asegurar que el modelo sea importado en el __init__ del modulo, ahi podemos utilizar cualquier estrategia de importacion, si no llega a importarse o a existir en ese espacio de nombres entonces no va a realizar la migracion de la base de datos.

(Opcional) Migrar la base de datos desde la consola

Cuando hacemos un cambio en el modelo debemos reflejarlo con una migracion en la base de datos, desde la interfaz de usuario.
Apps > Modulo > Actualizar
Para realizarlo desde la consola vamos a utilizar -d <database> recordando que hay multiples bases de datos, podemos seleccionar solo una para realizar la migracion, luego vamos a utilizar la bandera -u <module> con esto vamos a seleccionar el modulo que se va a actualizar y esto va a generar una migracion de la tabla original a la tabla actual

Crear permisos de acceso

Crear el archivo de acceso ir.module.access.csv dentro del subdirectorio security. Agregar el archivo creado en el manifesto.
'data': ['security/ir.module.access.csv']
Es imperativo crear el archivo porque odoo por defecto utiliza una white list por lo que el acceso por defecto es restringido, si no se declara no vamos a tener acceso a los modelos.

  1. - id: Puede tener cualquier valor
  2. - name: Puede tener cualquier valor pero normalemente tiene el mismo valor que id, por ejemplo access_model_mymodel, o access_id_1, etc.
  3. - model_id/id: debe tener siempre el prefijo model_ y debe tener el mismo nombre que el modelo, si el model tiene el caracter '.' se debe reemplazar por '_'
  4. - group_id/id: se puede dejar vacio para hacer alusion a todos los usuarios, o se puede seleccionar un grupo que normalmente se ven asi base.group_user, todos los usuarios tienen un grupo o varios definidos
  5. - perm_read: 1 para permitir 0 para negar
  6. - perm_write: 1 para permitir 0 para negar
  7. - perm_create: 1 para permitir 0 para negar
  8. - perm_unlink: 1 para permitir 0 para negar
Ejemplo basico
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink access_model_mymodel,access_model_mymodel,model_mymodel_mymodel,,1,1,1,1


Crear flujo basico de interfaz de usuario

El flujo mas simple de interfaz de usuario es dar click en un elemento del menu de modelos que activa la accion de renderizar el modelo en una vista (Menu -> Accion -> Vista). Para implementar este flujo debemos realizar los siguientes pasos:

  1.  Definir la accion
  2.  Definir el elemento del menu
  3.  Agregar los archivos al manifesto

1. En el archivo actions.xml vamos a utilizar la accion act_window

<odoo> <data> <record model="ir.actions.act_window" id="action1"> <field name="name">Action 1</field> <field name="res_model">mymodel.mymodel</field> <field name="view_mode">list,form</field> </record> </data> </odoo>

2. En el archivo menu.xml

<odoo> <menuitem id="mymodel_root_menu" name="Root menu" sequence="-100"> <menuitem id="mymodel_menu" name="My model" action="action1"><menuitem> </menuitem> </odoo>

3. Agregar los archivos al manifesto

'data': [     'security/ir.module.access.csv',     'views/actions.xml',     'views/menu.xml' ]


Buenas prácticas para módulos en Odoo 19

  • Usa nombres coherentes y en inglés si planeas distribuirlo.
  • Documenta tu código.
  • Sigue las convenciones del Odoo Community Association (OCA).
  • Evita modificar vistas o modelos del core sin herencia XML.
  • Mantén el módulo simple y modular.

Estas prácticas te ayudarán a mantener tu código entendible y fácil de actualizar cuando Odoo lance nuevas versiones.


Conclusión

Crear un módulo en Odoo 19 te permite adaptar el ERP a las necesidades específicas de cualquier empresa en México, desde facturación electrónica hasta logística, pagos y operaciones internas.

Con esta guía ya tienes las bases para:

  • Entender la estructura de un módulo

  • Definir modelos, vistas y seguridad

  • Instalar y probar el módulo

  • Seguir buenas prácticas

# Odoo
Miguel Angel Gonzalez Ramírez 28 de noviembre de 2025
Compartir
Etiquetas
Archivo