Migración de datos de Odoo - actualización de campo create_date

Gustavo Orrillo
- 22/04/2022 - 1 min. de lectura

Cuando uno migra los datos de Odoo en Odoo, muchas veces surge el inconveniente de la actualización de los campos create_date y create_uid. Los mismos son creados automaticamente por el ORM Odoo y son actualizados de forma automática por Odoo cada vez que se crea un registro en cualquier modelo (oportunidades, iniciativas, presupuestos, facturas, etc etc).

Estos campos (create_date y create_uid) no solo son útiles para auditoría, sino tambien con fines estadísticos. Por ejemplo en el módulo CRM sirve para conocer cuando se creó la iniciativa/oportunidad, y realizar estadísticas en base a ellos. El problema, es que al haber sido migrados, los registros tendrán como fecha de creación de la oportunidad la fecha de migración. Como se hace para evitar eso?

Para ello utilizamos SQL. Es muy probable que los registros se creen mediante un módulo de Odoo. Entonces en el método que crea el registro, uno procede luego de la creación, ejecutar una sentencia SQL que actualiza el dicho registro. Por ejemplo, supongamos que tenemos que crear un registro de oportunidad (modelo crm.lead) cuya fecha de creación es 24 de diciembre de 2020. En ese caso, en el método que migra dicho registro se verá:

# valores con los que crear la oportunidad
vals = { ... }
res = self.env['crm.lead'].create(vals)
# arma la sentencia SQL
sql_update = "UPDATE crm_lead SET create_date = '%s' WHERE id = %s'%('2020-12-24 00:00:00', res.id)
self.env.cr.execute(sql_update)

Este código actualiza correctamente el campo create_date en el registro creado.

Lo mismo se puede hacer desde una herramienta de SQL interactivo, por ejemplo psql. Supongamos que tenemos la oportunidad cuyo ID es igual a 10, y queremos actualizar su fecha de creación al 24 de diciembre de 2020; solo debemos ejecutar la siguiente sentencia de SQL

UPDATE crm_lead SET create_date = "2020-12-24 00:00:00" WHERE id = 10;

Tengan en cuenta que el campo create_date es del tipo datetime, por ello hay que indicar la fecha y hora cuando se actualiza el mismo.

Por último, recomiendo que instalen el módulo import_metadata de Thibault Francois. Dicho módulo permite actualizar la metadata durante el momento de creación y actualización de registros.


Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.