4. Vistas, acciones y menús
Objetivos
- conectar modelos con puntos de entrada utilizables
- diseñar vistas de lista y formulario enfocadas
- comprender que visibilidad no significa autorización
Modelo mental
Este concepto debe entenderse como parte de un sistema transaccional: la interfaz ayuda al usuario, el servidor conserva las reglas y la base persiste el resultado. Una vista presenta un modelo; una acción decide cómo abrirlo; un menú expone la acción. Son tres registros distintos y ninguno sustituye los permisos.
Práctica guiada
- Declare las vistas de formulario y lista.
- Cree ir.action.act_window y ordene sus vistas.
- Conecte la acción con un menú.
- Conceda acceso explícito al modelo mediante CSV.
- Pruebe con un usuario normal después de iniciar sesión nuevamente.
Ejemplo mínimo
<record model="ir.ui.view" id="book_view_form">
<field name="model">library.book</field>
<field name="type">form</field>
<field name="name">book_form</field>
</record>
<record model="ir.action.act_window" id="act_book">
<field name="name">Books</field>
<field name="res_model">library.book</field>
</record>
<menuitem name="Library" id="menu_library" sequence="50"/>
<menuitem parent="menu_library" action="act_book"
id="menu_book" sequence="10"/>
Cómo leer el ejemplo
Alinee los formularios con la secuencia de trabajo y limite las listas a campos útiles para reconocer o decidir. Traduzca etiquetas visibles en lugar de incorporar lógica dependiente del idioma.
Ejercicio
Cree los XML de formulario y lista, agregue orden de búsqueda y verifique la acción en los clientes de escritorio y web.
Realice el ejercicio primero con un caso mínimo, después agregue un caso inválido y convierta ambos en pruebas repetibles.
Resultado verificable
Un usuario autorizado abre, crea y busca libros; otro sin permiso no accede mediante RPC aunque conozca el modelo.
Errores frecuentes
- tratar un menú oculto como seguridad
- saturar las listas con todos los campos
- usar identificadores numéricos de base
- olvidar los permisos CSV o traducciones
Criterio para avanzar
- Puedo explicar la diferencia entre los conceptos sin mirar el código.
- El caso válido y el inválido tienen pruebas.
- Probé con un usuario sin privilegios administrativos.
- Sé cómo actualizar y cómo recuperar la base de entrenamiento.
Versión y referencias
La serie 6.0 requiere como mínimo Python 3.6 según los metadatos oficiales. Esta rama oficial todavía conserva metadatos históricos en setup.py; mantenga compatibilidad con la serie, pero prepare sus paquetes personalizados para la construcción estándar mediante python -m build. No confunda ese mínimo histórico con la versión de Python que haya certificado su organización.
Esta edición fija ejemplos y dependencias en la serie 6.0. Consulte el tutorial oficial 6.0, la API del servidor y el código de esa rama antes de trasladar el patrón a producción.