Su primer módulo¶
Información general¶
Este capítulo le ayuda a crear su primer módulo de Odoo desplegarlo en su proyecto de Odoo.sh.
Este tutorial requiere que haya creado un proyecto en Odoo.sh y conozca su URL de repositorio en Github.
Se explica el uso básico de Git y Github.
Se hacen las siguientes suposiciones:
~/src es el directorio en donde se ubican los repositorios relacionados a sus proyectos de Odoo.
odoo es el usuario de Github,
odoo-addons es el repositorio de Github,
feature-1 es el nombre de la rama de desarrollo,
master es el nombre de la rama de producción,
my_module es el nombre del módulo.
Reemplácelos con los valores de su elección.
Cree la rama de desarrollo¶
Desde Odoo.sh¶
En la vista de ramas:
haga clic en el botón
+
a lado de la etapa de desarrollo,escoja la rama maestra en la selección bifurcación,
tipo feature-1 en la entrada To.
Una vez que haya creado la compilación puede acceder al editor y buscar en la carpeta ~/src/user el código de su rama de desarrollo.


Desde su computadora¶
Clone su repositorio de Github en su computadora:
$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons
Cree una nueva rama:
$ git checkout -b feature-1 master
Cree una estructura de modelo¶
Andamiaje del módulo¶
Aunque no es necesario, el andamiaje evita la tarea de establecer la estructura básica de los módulos de Odoo. Puede usar el andamiaje para crear un nuevo módulo utilizando odoo-bin.
Desde el editor de Odoo.sh, en una terminal:
$ odoo-bin scaffold my_module ~/src/user/
O, desde su computadora, si cuenta con una instalación de Odoo:
$ ./odoo-bin scaffold my_module ~/src/odoo-addons/
If you do not want to bother installing Odoo on your computer,
you can also download this module structure template
in which you replace every occurrences of
my_module to the name of your choice.
Se generará la siguiente estructura:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ └── ir.model.access.csv
└── views
├── templates.xml
└── views.xml
Advertencia
No utilice caracteres especiales que no sean el guion bajo ( _ ) para el nombre de su módulo, ni siquiera un guion ( - ). Este nombre se utiliza para las clases de Python de su módulo, y tener nombres de clases con caracteres especiales que no sean el guion bajo no es válido en Python.
Descomente el contenido de los archivos:
models/models.py, un ejemplo de modelo con sus campos,
views/views.xml, un árbol y una vista de formulario, con los menús que los abren,
demo/demo.xml, registros de demostración para el modelo del ejemplo anterior,
controllers/controllers.py, un ejemplo de controlador que implementa algunas rutas,
views/templates.xml, dos ejemplos de vistas qweb utilizadas en las rutas de los controladores anteriores,
__manifest__.py, el archivo manifest de su módulo, incluyendo por ejemplo su título, descripción y archivos de datos a cargar. Solo debe descomentar el archivo de datos de la lista de control de acceso:
# 'security/ir.model.access.csv',
Manualmente¶
Si desea crear la estructura de su módulo de forma manual, siga Crear un módulo de Odoo para entender la estructura de los módulos y el contenido de cada archivo.
Haga cambios en la rama de desarrollo¶
Indique los cambios que se van a realizar
$ git add my_module
Confirme los cambios
$ git commit -m "My first module"
Envíe los cambios a su repositorio remoto
Desde una terminal del editor de Odoo.sh:
$ git push https HEAD:feature-1
El comando anterior se explica en la sección Confirmar y enviar cambios del capítulo Editor en línea. Incluye la explicación sobre por qué se le pedirá que escriba su nombre de usuario y contraseña, y qué hacer si utiliza la autenticación de dos factores.
O, desde la terminal de la computadora:
$ git push -u origin feature-1
Es necesario especificar -u origin feature-1 primera vez. Después, para enviar los futuros cambios desde su computadora, puede utilizar simplemente
$ git push
Pruebe su módulo¶
Su rama debería aparecer en las ramas de desarrollo de su proyecto.

Desde la vista de ramas de su proyecto, puede hacer clic en el nombre de su rama en el panel de navegación izquierdo para acceder a su historial.

Ahí podrá ver los nuevos cambios, incluido el comentario establecido. Una vez que la base de datos esté lista, puede acceder a ella haciendo clic en el botón Conectar.

Si su proyecto de Odoo.sh está configurado para instalar su módulo de forma automática, lo verá directamente entre las aplicaciones de la base de datos. De lo contrario, estará disponible en las aplicaciones a instalar.
A continuación, puede explorar su módulo, crear nuevos registros y probar sus funciones y botones.
Probar con los datos de producción¶
Para este paso necesita tener una base de datos de producción. Puede crearla si aún no la tiene.
Una vez que haya probado su módulo en una compilación de desarrollo con los datos de demostración y considere que está listo, puede probarlo con los datos de producción utilizando una rama de prueba.
Puede:
Convierta su rama de desarrollo en una rama de prueba, arrastrándola y soltándola en el título de la sección de prueba.
Merge it in an existing staging branch, by drag and dropping it onto the given staging branch.
You can also use the git merge
command to merge your branches.
This will create a new staging build, which will duplicate the production database and make it run using a server updated with your latest changes of your branch.

Once the database ready, you can access it using the Connect button.
Instale su módulo¶
Your module will not be installed automatically, you have to install it from the apps menu. Indeed, the purpose of the staging build is to test the behavior of your changes as it would be on your production, and on your production you would not like your module to be installed automatically, but on demand.
Your module may not appear directly in your apps to install either, you need to update your apps list first:
Activate the developer mode
in the apps menu, click the Update Apps List button,
in the dialog that appears, click the Update button.
Your module will then appear in the list of available apps.

Deploy in production¶
Once you tested your module in a staging branch with your production data, and believe it is ready for production, you can merge your branch in the production branch.
Drag and drop your staging branch on the production branch.

You can also use the git merge
command to merge your branches.
This will merge the latest changes of your staging branch in the production branch, and update your production server with these latest changes.

Once the database ready, you can access it using the Connect button.
Instale su módulo¶
Your module will not be installed automatically, you have to install it manually as explained in the above section about installing your module in staging databases.
Añadir un cambio¶
This section explains how to add a change in your module by adding a new field in a model and deploy it.
- From the Odoo.sh editor,
browse to your module folder ~/src/user/my_module,
then, open the file models/models.py.
- Or, from your computer,
use the file browser of your choice to browse to your module folder ~/src/odoo-addons/my_module,
then, open the file models/models.py using the editor of your choice, such as Atom, Sublime Text, PyCharm, vim, …
Then, after the description field
description = fields.Text()
Add a datetime field
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Then, open the file views/views.xml.
Después de
<field name="value2"/>
Añadir
<field name="start_datetime"/>
These changes alter the database structure by adding a column in a table, and modify a view stored in database.
In order to be applied in existing databases, such as your production database, these changes requires the module to be updated.
If you would like the update to be performed automatically by the Odoo.sh platform when you push your changes, increase your module version in its manifest.
Open the module manifest __manifest__.py.
Reemplace
'version': '0.1',
con
'version': '0.2',
The platform will detect the change of version and trigger the update of the module upon the new revision deployment.
Browse to your Git folder.
Then, from an Odoo.sh terminal:
$ cd ~/src/user/
O, desde la terminal de la computadora:
$ cd ~/src/odoo-addons/
Then, stage your changes to be committed
$ git add my_module
Confirme los cambios
$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"
Push your changes:
From an Odoo.sh terminal:
$ git push https HEAD:feature-1
O, desde la terminal de la computadora:
$ git push
The platform will then create a new build for the branch feature-1.

Once you tested your changes, you can merge your changes in the production branch, for instance by drag-and-dropping the branch on the production branch in the Odoo.sh interface. As you increased the module version in the manifest, the platform will update the module automatically and your new field will be directly available. Otherwise you can manually update the module within the apps list.
Usar una librería externa de Python¶
If you would like to use an external Python library which is not installed by default, you can define a requirements.txt file listing the external libraries your modules depends on.
The platform will use this file to automatically install the Python libraries your project needs.
The feature is explained in this section by using the Unidecode library in your module.
Create a file requirements.txt in the root folder of your repository
From the Odoo.sh editor, create and open the file ~/src/user/requirements.txt.
Or, from your computer, create and open the file ~/src/odoo-addons/requirements.txt.
Añadir
unidecode
Then use the library in your module, for instance to remove accents from characters in the name field of your model.
Open the file models/models.py.
Antes
from odoo import models, fields, api
Añadir
from unidecode import unidecode
Después de
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Añadir
@api.model
def create(self, values):
if 'name' in values:
values['name'] = unidecode(values['name'])
return super(my_module, self).create(values)
def write(self, values):
if 'name' in values:
values['name'] = unidecode(values['name'])
return super(my_module, self).write(values)
Adding a Python dependency requires a module version increase for the platform to install it.
Edit the module manifest __manifest__.py
Reemplace
'version': '0.2',
con
'version': '0.3',
Stage and commit your changes:
$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"
Then, push your changes:
In an Odoo.sh terminal:
$ git push https HEAD:feature-1
In your computer terminal:
$ git push