Cómo abrir un formulario personalizado en ventana emergente (modal) en Odoo sin escribir un módulo

¿Quieres pedirle al usuario que complete un dato importante antes de continuar? Así puedes abrir una ventana emergente con un formulario personalizado, sin escribir código.

👀 ¿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?

  1. Una vista formulario personalizada
  2. Un botón que dispare una acción de servidor
  3. Que esa acción devuelva un ir.actions.act_window
  4. (Opcional) Lógica condicional para cuándo mostrar la ventana

1️⃣ Crea una vista de formulario personalizada

  1. Activa Modo Desarrollador
  2. Ve a Ajustes > Técnicos > Vistas
  3. 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>
    
  4. 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.

Cómo abrir un formulario personalizado en ventana emergente (modal) en Odoo sin escribir un módulo
Wilfredo Fernando Pastor Avila July 3, 2025
Share this post
Archive
Sign in to leave a comment
Odoo Hacks: 4 atajos de teclado para gestionar tareas
Gestiona proyectos como un verdadero profesional