Saltar al contenido

Mixins: mail.thread

🐍 DESARROLLO · ODOO · MIXINS

Mixins en Odoo: el caso mail.thread

Los mixins son piezas de código reutilizables que puedes “mezclar” con tus modelos para añadir funcionalidades comunes sin duplicar código. mail.thread es el más usado: con una sola línea de herencia tu modelo gana chatter, tracking de campos, notificaciones por correo y mensajes.

💬
CHATTER
Mensajes y notas internas en el registro

📊
TRACKING
Cambios de campos registrados

📧
NOTIFICACIONES
Correos y respuesta desde email

MÉTODOS LISTOS
message_post y compañía

1
¿Qué son los mixins?

En Odoo, un mixin es una clase auxiliar que no representa un modelo por sí misma (no suele tener tabla dedicada en la BD), sino que se utiliza para añadir funcionalidades comunes a otros modelos.

Una forma de interpretarlos: piezas de código reutilizables que puedes “mezclar” (traducción de “mixin”) con diferentes modelos para extender sus capacidades sin duplicar código.

📌 CARACTERÍSTICAS PRINCIPALES
  • No son modelos en BD: usan _name = "..." pero también _abstract = True, lo que significa que no se instancian solos.
  • Código que aplica a muchos modelos: seguimiento de cambios, actividades programadas, etc.
  • Para usarlos: basta con añadir la clase a la herencia de tu modelo.

2
Mixins comunes en Odoo

mail.thread
Permite que un modelo tenga un chatter (mensajes, notas internas, notificaciones).

mail.activity.mixin
Añade soporte para actividades programadas (tareas pendientes, recordatorios).

portal.mixin
Da capacidad de exponer un modelo en el portal web de Odoo.

website.published.mixin
Permite publicar / despublicar registros en un sitio web.

pos.load.mixin
Permite añadir campos y registros dentro de la información del punto de venta.

3
Caso práctico: usar mail.thread

Para verlo en acción, creamos un módulo personalizado con un modelo sencillo llamado blog.test con dos campos: nombre y código. Le agregamos su vista lista, formulario y una acción/menú raíz.

3.1 — Definición del modelo

Definición del modelo blog.test en Python

3.2 — Vista formulario

Definición de la vista formulario del modelo

3.3 — Registro vacío sin chatter

Vista del registro antes de añadir mail.thread

4
Heredar mail.thread en el modelo

Para añadir las funcionalidades del mixin, lo añadimos dentro de las herencias en la definición de la clase Python:

Modelo con mail.thread añadido a la lista de herencias
⚠️ DEPENDENCIA OBLIGATORIA
El módulo personalizado debe declarar dependencia de mail en el manifiesto. Si falta, al actualizar verás un error en la terminal — la herencia falla porque no encuentra la clase del mixin.

5
Activar el chatter en la vista

Al actualizar el módulo no notamos cambios en la UI todavía — pero internamente el modelo ya tiene todas las funcionalidades del mixin. Para mostrar el chatter, modificamos la vista formulario añadiendo el bloque correspondiente:

Modificación de la vista formulario para mostrar el chatter

Al recargar el registro, el chatter aparece. Los usuarios ya pueden enviar mensajes, notas internas y, con la configuración adecuada, notificaciones por correo electrónico (incluso responderlas desde el mismo correo):

Vista del registro con el chatter activo

6
Tracking de cambios en campos específicos

El mixin mail.thread añade un potente sistema de seguimiento. Para activarlo en un campo, basta con marcarlo con tracking=True:

Campo con atributo tracking=True para seguimiento automático

A partir del cambio, cualquier modificación al campo queda registrada en el chatter. Por ejemplo, al actualizar el nombre, se ve el cambio histórico:

Cambio del campo registrado en el chatter

7
Métodos del backend que añade mail.thread

Del lado del backend se incorporan funciones para enviar mensajes y administrar seguidores fácilmente. Las más importantes:

Método Para qué sirve
message_post Publica un nuevo mensaje en un hilo existente. El más usado.
message_post_with_view Envía correo o publica usando un view_id renderizado con ir.qweb.
message_post_with_template Envía un correo con una plantilla.
message_new Crea un registro a partir de información extraída del mensaje.
message_update Se llama al recibir un nuevo mensaje en un hilo existente.
💡 REVISA LAS FIRMAS
Estas funciones tienen parámetros distintos. Antes de llamarlas en un modelo personalizado, revisa su definición en el código fuente del módulo mail para entender exactamente qué espera cada una.

8
Ejemplo: botón que publica con message_post

Ejemplificamos el uso. Añadimos un botón en la vista formulario que llama a un método que usa message_post:

Botón en la vista formulario que llama al método personalizado

El método Python que ejecuta el botón:

Método Python con la llamada a message_post

Al pulsar el botón, el mensaje aparece automáticamente en el chatter:

Mensaje publicado en el chatter desde el botón

9
Consejos rápidos

✅ Antes de programar, revisa los mixins
Muchos comportamientos comunes (chatter, ordenación jerárquica, seguimiento) ya están en mixins nativos. Úsalos antes de escribir código.

✅ Combínalos con herencia
Los mixins se complementan con la herencia clásica de modelos para añadir funciones reutilizables.

💡 Si solo necesitas algo puntual, no incluyas el mixin completo
Busca la definición del mixin y copia solo el campo o método que necesitas — evita campos innecesarios.

⚠️ Cuidado con redefiniciones
Si dos mixins redefinen el mismo método, respeta el orden de herencia y usa super() correctamente.

⚠️ Impacto en rendimiento y migraciones
Algunos mixins agregan campos y relaciones automáticamente — esto puede influir en rendimiento y en migraciones futuras.

📌 En resumen

Los mixins son la forma idiomática de Odoo para reutilizar comportamientos entre modelos. mail.thread es el más conocido y aporta valor inmediato: chatter, tracking de campos, notificaciones por correo y métodos listos para usar.

Antes de programar funcionalidad transversal desde cero, revisa qué mixins existen. La mayoría de las veces, el comportamiento que buscas ya está implementado y te ahorras tiempo y bugs. En Exdoo aplicamos esta filosofía en cada módulo: aprovechar el ecosistema antes de duplicar — y compartimos contenido técnico para developers Odoo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp