El ORM de Odoo (mapeo objeto-relacional) es la forma de interactuar con la base de datos y realizar operaciones sobre ella en la plataforma Odoo. El ORM aplica los principios de la programación orientada a objetos (POO) a las operaciones de base de datos y representa las tablas como objetos de Python. Así, las operaciones son más programáticas y legibles, y los desarrolladores las gestionan con más facilidad.
Estos son los conceptos básicos y el funcionamiento del ORM de Odoo:
- Modelo
Un modelo es una clase de Python que representa una tabla de la base de datos. Cada módulo de Odoo contiene uno o más modelos, que crean y gestionan las tablas de la base de datos. Este es un ejemplo sencillo de modelo:from odoo import models, fields
class Customer(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
# Custom fields
is_company = fields.Boolean(string='Is a Company', default=False)
customer_code = fields.Char(string='Customer Code') - Campo
Los campos definen el tipo y el comportamiento de los datos de un modelo y representan las columnas de la tabla. Por ejemplo, en un modelo de clientes se pueden definir campos como "name", "email" y "phone": - Registro
Un registro representa una entrada concreta de un modelo en la base de datos y contiene los valores de los campos definidos por el modelo. Por ejemplo, un registro de cliente se crea así:new_customer = self.env['res.partner'].create({
'name': 'John Doe',
'email': '[email protected]',
'phone': '123456789'
}) - Dominio y contexto
- Dominio: sirve para filtrar registros según ciertas condiciones. Por ejemplo, filtrar registros según el valor de un campo:
domain = [('is_company', '=', True)]
companies =
self.env['res.partner'].search(domain) - Contexto: sirve para indicar cómo deben comportarse las operaciones. Por ejemplo, fijar el idioma del usuario u otros ajustes mediante el contexto:
context = {'lang': 'en_US'}
products =
self.env['product.product'].with_context(context).search([])
- Dominio: sirve para filtrar registros según ciertas condiciones. Por ejemplo, filtrar registros según el valor de un campo:
- Operaciones CRUD (crear, leer, actualizar, eliminar)
- Crear: crear un registro nuevo:
new_customer = self.env['res.partner'].create({
'name': 'Jane Doe',
'email': '[email protected]' }) - Leer: leer registros:
customer = self.env['res.partner'].browse(1)
print(customer.name) - Actualizar: actualizar registros:
customer.write({'email': '[email protected]'}) - Eliminar: eliminar registros:
customer.unlink()
- Crear: crear un registro nuevo:
Conclusión
El ORM de Odoo da a los desarrolladores flexibilidad y comodidad para gestionar la base de datos, lo que facilita desarrollar y personalizar aplicaciones con rapidez. Con el ORM, las operaciones de base de datos se gestionan con código Python de forma más clara y sostenible.