EST-TDT-001 Estándar de Codificación para Odoo
v 2.1
Propósito
El código producido es mantenible, se reducen errores y es de fácil comprenhesión.
Notas Introductorias
Este estándar se utuliza para el desarrollo del proyecto Talent360 para los archivos, variables, directorios y modelos en Odoo.
Directorios
Un módulo está organizado en directorios importantes que contienen la lógica de negocio
data/
: xml datamodels/
: definición de modeloscontrollers/
: contiene controladores (Rutas HTTP)security/
: contiene archivos .xml y .csv para brindar permisos de acceso a usuariosviews/
: contiene las vistas y los templatesstatic/
: contiene los web assets, separados por css/, js/, img/, lib/
Otros directorios opcionales son:
wizard/
: reagrupa los modelos transitorios y sus vistas.report/
: contiene reportes y modelos imprimibles basado en vistas de SQLtests/
: contiene tests de Python
Nombre de archivos
-
Modelos
Ejemplo:
addons/nombre_del_modulo/
| models/
| | modelo_1.py
| | modelo_2.py -
Seguridad
Para seguridad, tres archivos principales deben usarse:
-
ir.mode.access.csv
: Definición de permisos de acceso -
nombre_del_modulo_groups
: Definición de grupos de usuario -
nombre_del_modulo_security
: Definición de reglas de registroEjemplo:
addons/nombre_del_modulo/
| security/
| | ir.model.access.csv
| | nombre_del_modulo_groups.xml
| | nombre_del_modulo_security.xml
-
-
Vistas
Para las vistas relacionadas al backend (listas, formularios, etc) llevan el sufijo
\_views.xml
.Para las vistas relacionadas con los menús, llevan el sufijo
\_menus.xml
.Los templates llevan el sufijo
\_templates.xml
.Ejemplo:
addons/nombre_del_modulo/
| views/
| | nombre_del_modulo_menus.xml
| | nombre_del_modulo_views.xml
| | nombre_del_modulo_templates.xml -
Data
Separa los archivos por su propósito (demo o data).
Ejemplo:
addons/nombre_del_modulo/
| views/
| | nombre_del_modulo_data.xml
| | nombre_del_modulo_demo.xml -
Controladores
Ejemplo:
addons/nombre_del_modulo/
| controllers/
| | nombre_del_modulo.py -
Static
Comúnmente se crea una carpeta src/ dentro de static/ para estructurar mejor las carpetas de components/, css/, img/, js/, etc.
Archivos XML
1. Formato
-
El atributo “model” se escribe antes que “id”.
-
Los valores de los atributos deben usar doble comillas.
-
Para la declaración de un
<field>
, el atributo del nombre se escribe primero. El valor del atributo se ingresa dentro de los tags de<field>
.Ejemplo:
<record id="view_id" model="ir.ui.view">
<field name="name">view.name</field>
</record>2. IDs XML y nombramiento
-
Menu:
<nombre_del_modulo>_menu
, o<nombre_del_modulo>_menu_do_stuff
para submenus. -
Vista:
<nombre_del_modulo>_view_<tipo_de_vista>
, donde el tipo de vista es un kanban, form, tree, search, … -
Acción:
<nombre_del_modulo>_action
. -
Acciones de ventana:
<nombre_del_modulo>_action_view_<tipo_de_vista>
. -
Grupo:
<nombre_del_modulo>_group_<nombre_del_grupo>
. -
Regla:
<nombre_del_modulo>_rule_<grupo_involucrado>
.Ejemplo (vistas):
<record id="model_name_view_form" model="ir.ui.view">
<field name="name">model.name.view.form</field>
...
</record>Ejemplo (acciones):
<record id="model_name_action" model="ir.act.window">
<field name="name">Model Main Action</field>
...
</record>Ejemplo (menus y submenus):
<menuitem
id="model_name_menu_root"
name="Main Menu"
sequence="5"
/>
<menuitem
id="model_name_menu_action"
name="Sub Menu 1"
parent="module_name.module_name_menu_root"
action="model_name_action"
sequence="10"
/>Ejemplo (seguridad)
<record id="module_name_group_user" model="res.groups">
...
</record>
<record id="model_name_rule_public" model="ir.rule">
...
</record>
3. Herencia
-
Los IDs de Xml de vistas heredadas deben usar el mismo ID que el registro original.
-
El nombramiento debe contener un sufijo de
.inherit.{detalles}
Ejemplo:
<record id="model_view_form" model="ir.ui.view">
<field name="name">model.view.form.inherit.module2</field>
<field name="inherit_id" ref="module1.model_view_form"/>
...
</record>
-
Python
Símbolos y Convenciones
-
Nombres de modelos:
- Usa la forma singular del nombre (res.partner en lugar de res.partnerS)
-
Nombre de clases:
- Usa camelcase:
(class AccountInvoice(models.Model))
- Usa camelcase:
-
Nombre de variables: _ Usa camelcase para variable de modelo _ Usa snake case para variables comunes _ Agrega el sufijo de _id o _ids a tus variables que contienen identificadores _ Los campos de One2Many y Many2Many deben contener “_ids” como sufijo * Los campos de Many2One deben contener “_id” como sufijo.
Ejemplo:
Partner = self.env['res.partner'] partners = Partner.browse(ids) partner_id = partners[0].id
-
Nombre de métodos
- Compute:
compute<campo>
- Search:
search<campo>
- Default:
default<campo>
- Selection:
selection<campo>
- Onchange:
onchange<campo>
- Constraint:
check<nombre_de_restricción>
- Action:
action<acción>
- Compute:
-
Orden de Atributos de Modelos
- Prefijo de
“_”
- Método default y default_get
- Declaración de campos
- Métodos de compute, inverse y search
- Método de selection
- Métodos de constraints
- Métodos (CRUD) (ORM overrides)
- Métodos de action
- Otros métodos de negocio
- Prefijo de
Terminología
Permiso de acceso: Reglas usadas para controlar el acceso del usuario a la base de datos de Odoo. Especifica qué puede hacer un usuario en la base de datos. Es esencial tener estas reglas para evitar confusión y asegurar que la base de datos es segura.
Reglas de Registro: Determinan quién puede acceder al objeto. Para manejar estas reglas, tenemos modos de accesos (crear, editar, leer y eliminar) para el objeto.
Control de cambios
Versión | Cambio | Autor del cambio | Revisor(es) | Fecha de cambio |
---|---|---|---|---|
v 1.0 | Creación del estándar de codificación en Odoo | Carlos Velasco, Alejandra Cabrera | Diego Sandoval | 04/04/2024 |
v 1.1 | Correción de estructura | Diego Vega | 09/04/2024 | |
v 2.1 | Corrección AUD-102 | Daniel Fuentes | 15/05/2024 |