Tipos de modelos en Odoo
En Odoo, todo modelo hereda de una de cuatro clases base: models.Model, TransientModel, AbstractModel o models.Base. Cada una tiene un propósito distinto, y elegir bien impacta directamente el rendimiento, la mantenibilidad y la escalabilidad de tu módulo.
📋 Comparativa rápida
1
models.Model — el modelo estándar
models.Model es el tipo más común. Representa tablas de base de datos persistentes que almacenan datos de forma permanente. Es lo que usas para casi todo modelo de negocio.
from odoo import models, fields class SaleOrder(models.Model): _name = 'sale.order' _description = 'Sales Order' name = fields.Char(string='Order', required=True) partner_id = fields.Many2one('res.partner')
Características principales:
_inherit).Many2one, One2many, Char…).res.partner), facturas (account.move), órdenes de venta (sale.order), productos (product.template), inventario (stock.picking) — prácticamente todo lo que ves como “registro de negocio” en la interfaz.

2
TransientModel — modelos transitorios
models.TransientModel es un modelo especial cuyos registros se eliminan automáticamente después de un tiempo determinado. Es ideal para operaciones temporales: wizards, procesos batch o configuraciones efímeras.
class SaleAdvancePaymentInv(models.TransientModel): _name = 'sale.advance.payment.inv' _description = 'Sales Advance Payment Invoice' advance_payment_method = fields.Selection([...]) amount = fields.Float('Down Payment Amount')
Casos de uso típicos:


3
AbstractModel — modelos abstractos
models.AbstractModel es un modelo base que no crea tabla en la base de datos. Se utiliza para definir comportamientos y campos comunes que serán reutilizados por otros modelos vía herencia múltiple.
class MailThread(models.AbstractModel): _name = 'mail.thread' _description = 'Email Thread' # Lógica reutilizable de mensajería class SaleOrder(models.Model): _inherit = ['sale.order', 'mail.thread']
Características principales:
report.module.report_xml), funcionalidades transversales como envío de correos o logging, campos computados compartidos entre varios modelos.

4
models.Base — la raíz de todo
models.Base es la clase raíz de la que heredan todos los modelos de Odoo. Rara vez se usa directamente en desarrollo de módulos, pero entender su rol ayuda a debuggear comportamientos extraños del ORM.
🌳 Jerarquía de herencia
├── models.AbstractModel (no crea tabla)
├── models.Model (persistente)
└── models.TransientModel (temporal)
🤔 ¿Cuál tipo elegir?
📌 En resumen
Comprender los tipos de modelos en Odoo es fundamental para desarrollar aplicaciones eficientes y mantenibles. Cada uno cumple un propósito: Model para datos de negocio, TransientModel para operaciones temporales, AbstractModel para funcionalidad reutilizable y Base como raíz interna.
Antes de declarar un modelo, hazte tres preguntas: ¿debe persistir?, ¿es reutilizable?, ¿es temporal? La respuesta te lleva a la clase correcta. En Exdoo desarrollamos módulos a medida en Odoo 17, 18 y 19 — escríbenos si tu equipo necesita extender la plataforma sin sacrificar mantenibilidad.
Deja un comentario