Ir al contenido

Cómo crear un módulo personalizado en Odoo 19

Tutorial para crear un modulo en odoo 19
28 de noviembre de 2025 por
Cómo crear un módulo personalizado en Odoo 19
Miguel Ángel González Ramírez

Respuesta corta: un módulo de Odoo es un directorio con un manifiesto, modelos, vistas y permisos de acceso. Esta guía recorre el flujo mínimo para crear el primero en Odoo 19: estructura, modelo, seguridad y una pantalla funcionando.

El síntoma

Odoo no cubre un proceso de tu negocio y no sabes por dónde empezar a extenderlo.

La causa raíz

Primero se configura lo estándar; el módulo a la medida es para lo que el estándar no cubre. Cuando el proceso lo exige, la solución no es cambiar de sistema ni modificar el código base, sino agregar un módulo: una pieza de software que agrega o modifica funcionalidades dentro del sistema.

Un módulo a la medida se justifica cuando el estándar no cubre el proceso, no antes.

Cómo se resuelve

¿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 básica de un módulo

Un módulo 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 módulo.

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 manifiesto del módulo y el archivo init dentro del directorio de nuestro módulo. El manifiesto debe contener las siguientes llaves:

  1. - name: Nombre que aparece en pantalla
  2. - license: Tipo de licencia del módulo
  3. - description: Breve descripción que aparece en pantall del módulo
  4. - depends: Arreglo de dependencias, indispensable poner 'base' como primera dependencia
  5. - application: Booleano que define el módulo como aplicación, más que nada para filtrado en Odoo apps
  6. - data: Arreglo con los paths de los archivos de datos, el sistema reconoce de manera automática que hace cada uno, solo es importante seguir la convención 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 manifiesto, nuestro módulo va a ser reconocido por el sistema, ojo también debe de estar el archivo __init__.py aunque este vacio para que sea un módulo valido

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

Activar el modo de depuración

Agregar el siguiente parámetro 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 nuestra 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 módulo, ahi podemos utilizar cualquier estrategia de importación, si no llega a importarse o a existir en ese espacio de nombres entonces no va a realizar la migración 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 migración 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 múltiples bases de datos, podemos seleccionar solo una para realizar la migración, luego vamos a utilizar la bandera -u <module> con esto vamos a seleccionar el módulo que se va a actualizar y esto va a generar una migración 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 manifiesto.

'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 normalmente 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 alusión 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 básico

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 básico de interfaz de usuario

El flujo más simple de interfaz de usuario es dar clic en un elemento del menu de modelos que activa la acción de renderizar el modelo en una vista (Menu -> Acción -> Vista). Para implementar este flujo debemos realizar los siguientes pasos:

  1.  Definir la acción
  2.  Definir el elemento del menu
  3.  Agregar los archivos al manifiesto

1. En el archivo actions.xml vamos a utilizar la acción 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 manifiesto

'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.

Lo que ya sabes hacer

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

Tres preguntas para empezar tu propio diagnóstico

  • ¿La configuración estándar de Odoo ya cubre este proceso, sin desarrollar nada?
  • ¿Tu proceso necesita una pantalla, una regla o una integración que Odoo no trae?
  • ¿Tienes quién mantenga y revise el módulo cada vez que actualices de versión?

Antes de programar, confirma que Odoo no lo resuelve con configuración. Un módulo que no hacía falta también hay que mantenerlo en cada actualización.

# Odoo
Cómo crear un módulo personalizado en Odoo 19
Miguel Ángel González Ramírez 28 de noviembre de 2025
Compartir
Etiquetas
Archivo
ServiciosVer todos los serviciosImplementación de Odoo EnterpriseContabilidad que cuadra con el SATConsultoría de procesosMódulos a la medida sobre OdooSoftware a la medida
SectoresVer todos los sectoresManufacturaMayoreo B2BRetail multitiendaTransporte de hidrocarburos
Casos de éxitoMetodologíaBlogNosotrosContacto Solicita una demostración
WhatsAppLlamar