Que es el ID en Odoo? Y como interpretar la estructura de datos de una tabla de Odoo.

Gustavo Orrillo
- 09/04/2022 - 2 min. de lectura

Los objetos en Odoo (con excepción de los wizard) se persisten en tablas de una base de datos PosgreSQL. Por lo general, el nombre de la tabla que persiste el objeto es el nombre del modelo al que se reemplazan los puntos por los guiones bajos. Asi por ejemplo, el modelo res.country.state (que administra los estados provinciales) en la base de datos se persiste en la tabla res_country_state (res.partner en res_partner y la lista continua).

El ORM, cada vez que crea un modelo lo hace con unos campos predeterminados los cuales cuando se crea o actualiza un registro, se almacenan con valores por defecto. Por ejemplo, si listamos la estructura de la tabla res_country_state observaremos:

 

Aca podemos observar que (mas allá de los índices y las claves foraneas) hay cuatro campos creados por defecto: id, create_uid, create_date, write_uid, write_date. Veamos que hacen cada uno de ellos:

  • id: clave primaria del registro. Actualizado en forma automática no por Odoo sino por PostgreSQL (noten el nextval en el valor default del campo). PostgreSQL se encarga de mantener el valor de este campo (y de la secuencia).

  • create_uid: ID del usuario que creó el registro. Actualizado en forma automática por Odoo.

  • create_date: timestamp con el momento en el que se creó el registro. Actualizado en forma automática por Odoo.

  • write_uid: ID del último usuario que actualizó el registro. Actualizado en forma automática por Odoo.

  • write_date: timestamp con el momento en que por última vez fue actualizado el registro. Actualizado en forma automática por Odoo.

El campo más importante a nivel integridad para Odoo es el campo ID. Cuando uno desarrolla en Odoo no necesita preocuparse de la integridad referencial ya que Odoo se encarga solo de mantenerla. Cada vez que se crea un registro automáticamente se actualiza su columna ID con una secuencia única para la tabla. Y dicho valor será la clave para referenciar  en las claves foráneas (los campos many2one, siempre tienen almacenado el ID de la tabla referenciada). Demás esta decir que no se debe innovar ni hacer pruebas con el campo ID. Ya están prevenidos.

Como decíamos, cada registro tiene un ID. Entonces, como podemos hacer para conocer el ID del registro con el que estamos trabajando? Es muy facil. La primer forma es mirando el URL,



Como verán el URL tiene el elemento model=crm.lead (lo que indica que se está trabajando con las iniciativas y oportunidades del módulo CRM) y el elemento id=741 (lo que indica que es el registro con ID igual a 741 (la clave primaria). Esa es una forma. La siguiente manera es con el modo desarrollador, uno clickea en "Ver Metadatos" y podrá observar:


Por último, mientras uno desarrolla en Odoo es importantísimo estar al tanto de la existencia de los IDs. Si bien el ORM hace un buen trabajo ocultando su existencia, la verdad es que es algo que uno necesita saber (como el himno nacional) sobre todo por la existencia de campos many2one y many2many. Ahora, mientras uno trabaja con xmlrpc, es fundamental saber de la existencia de los IDs. Ya que la secuencia de las operaciones en xmlrpc siempre es: search (para buscar los registros con los que trabajar) lo que devuelve una lista de IDs, y luego se procesan esos IDs donde uno por uno o se lee (read) o se escribe (write) o se borra (unlink).


Acerca de:

Gustavo Orrillo

Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.