👀 ¿Te ha pasado esto?
Estás implementando un flujo en Odoo y necesitas mostrarle al usuario un formulario personalizado, en una ventana modal, para que complete cierta información antes de continuar.
Tal vez quieres:
- Confirmar una acción importante
- Solicitar datos adicionales
- Forzar que el usuario complete un campo antes de cerrar algo
- O simplemente mejorar la experiencia de uso
✅ La respuesta es sí.
❌ Y no necesitas ser desarrollador ni crear módulos para lograrlo.
🎯 ¿Qué vas a aprender?
- Cómo crear una vista de formulario personalizada
- Cómo abrir esa vista como ventana modal
- Cómo prellenar campos si lo necesitas
- Cómo evitar errores comunes (como copiar valores entre registros)
- Y cómo usar este patrón para múltiples casos reales
🧩 ¿Qué se necesita?
- Una vista formulario personalizada
- Un botón que dispare una acción de servidor
- Que esa acción devuelva un
ir.actions.act_window - (Opcional) Lógica condicional para cuándo mostrar la ventana
1️⃣ Crea una vista de formulario personalizada
- Activa Modo Desarrollador
- Ve a Ajustes > Técnicos > Vistas
- Crea una nueva vista:
- Nombre: Formulario de Confirmación
- Tipo: form
- Modelo: por ejemplo, project.task
- Contenido XML:
<form string="Confirmación"> <sheet> <group> <field name="x_studio_comentario"/> </group> </sheet> </form> - Guarda y anota el ID (por ejemplo: 2230)
2️⃣ Agrega un botón con Odoo Studio
- Abre el formulario del modelo (por ejemplo, una tarea)
- Activa Odoo Studio
- Agrega un botón inteligente o de acción
- Asígnalo a una Acción de Servidor
3️⃣ Crea la acción de servidor
Ve a Ajustes > Técnicos > Acciones de Servidor
Ejemplo de código:
action = {
'type': 'ir.actions.act_window',
'name': 'Formulario de Confirmación',
'res_model': 'project.task',
'res_id': record.id,
'view_mode': 'form',
'views': [(2230, 'form')], # Reemplaza con el ID de tu vista
'target': 'new',
'context': {
'force_edit': True
}
}
🔁 ¿Y si quiero que solo se muestre en ciertos casos?
Puedes usar una condición como esta:
if not record.x_studio_comentario:
action = {
# mismo contenido que arriba
}
🧪 ¿Para qué puedes usar esto?
- Confirmaciones antes de avanzar etapas
- Recolección de información sensible (motivos, observaciones)
- Formularios de validación adicional
- Checklists previos a cerrar o aprobar
- Mejorar la experiencia sin alterar vistas principales
⚠️ Buenas prácticas
- No uses ventanas emergentes para acciones simples
- Que el formulario tenga un propósito claro
- Evita copiar valores a registros nuevos recurrentes
- Combina con reglas automatizadas para cerrar flujos
✅ Conclusión
Con este patrón puedes construir interacciones más limpias y controladas en Odoo sin necesidad de código.
Solo necesitas:
- Un formulario personalizado
- Una acción de servidor
- Una lógica clara de cuándo y para qué mostrarlo
🎁 ¿Quieres ver un ejemplo aplicado?
Mira nuestro artículo sobre cómo forzar que se llene el “Motivo de pérdida” al cerrar una tarea como perdida.