100 % de los repositorios · 934 hallazgos · Deuda técnica
Versión del manifiesto sin actualizar
Qué pasa. No rompe nada por sí solo, pero delata qué versión espera el módulo y confunde a quien lo instala.
Cómo se arregla. Subir el prefijo a la versión de destino y reiniciar la numeración interna del módulo.
Dónde lo verifiqué. Convención de Odoo: el manifiesto declara la serie a la que pertenece el módulo.
55 % de los repositorios · 2.116 hallazgos · Impide arrancar · se rompe desde la 18.0
Vistas de lista declaradas como <tree>
Qué pasa. El tipo de vista ya no existe con ese nombre; la vista no se registra.
Cómo se arregla. Renombrar la etiqueta a <list> y </list>, y revisar los xpath que apunten a //tree.
Dónde lo verifiqué. En odoo 19 ningún archivo de addons/base/views usa <tree; todas son <list.
50 % de los repositorios · 987 hallazgos · Rompe un flujo · se rompe desde la 18.0
view_mode con "tree" en las acciones
Qué pasa. La acción abre en un modo de vista inexistente y el menú queda muerto.
Cómo se arregla. Cambiar "tree" por "list" en view_mode.
Dónde lo verifiqué. odoo/addons/base/views/ir_actions_views.xml:590 declara list,form.
50 % de los repositorios · 4.013 hallazgos · Deuda técnica · se rompe desde la 17.0
t-esc en plantillas QWeb
Qué pasa. Queda como deuda: funciona por compatibilidad, hasta que deja de funcionar.
Cómo se arregla. Reemplazar por t-out, que escapa igual y además respeta los widgets de campo.
Dónde lo verifiqué. La documentación de QWeb de 17 en adelante usa t-out; t-esc quedó como alias heredado.
45 % de los repositorios · 124 hallazgos · Rompe un flujo · se rompe desde la 18.0
Chatter como <div class="oe_chatter">
Qué pasa. El chatter deja de pintarse o se pinta roto en el formulario.
Cómo se arregla. Sustituir el bloque completo por la etiqueta <chatter/>.
Dónde lo verifiqué. Los formularios de addons/mail en la 19 usan la etiqueta <chatter.
40 % de los repositorios · 24 hallazgos · Impide arrancar · se rompe desde la 17.0
create() con un solo diccionario
Qué pasa. Las creaciones en lote pasan una lista donde el código espera un diccionario: TypeError.
Cómo se arregla. Decorar con @api.model_create_multi y recibir vals_list, iterando dentro.
Dónde lo verifiqué. model_create_multi está en odoo/orm/models.py y es el contrato de create en la 19.
35 % de los repositorios · 5.563 hallazgos · Impide arrancar · se rompe desde la 17.0
Atributos "attrs" y "states" en las vistas
Qué pasa. Odoo rechaza la vista al instalar el módulo y el módulo no arranca.
Cómo se arregla. Reemplazar por expresiones directas en el propio campo: invisible="condición", readonly="condición", required="condición", con sintaxis Python y sin comillas anidadas.
Dónde lo verifiqué. odoo/addons/base/models/ir_ui_view.py:493 lanza ValidationError con el texto "Since 17.0, the 'attrs' and 'states' attributes are no longer used."
30 % de los repositorios · 141 hallazgos · Rompe un flujo · se rompe desde la 17.0
name_get() sobrescrito
Qué pasa. El método ya no lo llama nadie: los nombres siguen mostrándose, pero con el valor por defecto.
Cómo se arregla. Reescribir como _compute_display_name asignando self.display_name, con @api.depends de los campos usados.
Dónde lo verifiqué. def name_get no aparece en odoo/orm/models.py de la 19; _compute_display_name sí.
15 % de los repositorios · 26 hallazgos · Rompe un flujo · se rompe desde la 17.0
flush() sobre un registro o el entorno
Qué pasa. AttributeError en tiempo de ejecución, normalmente dentro de un flujo que ya está en producción.
Cómo se arregla. Usar flush_model() para todo el modelo, flush_recordset() para el conjunto o env.flush_all().
Dónde lo verifiqué. odoo/orm/models.py expone flush_all, flush_model, flush_query y flush_recordset.
5 % de los repositorios · 50 hallazgos · Impide arrancar · se rompe desde la 18.0
get_module_resource
Qué pasa. La función ya no existe: ImportError o AttributeError al cargar el módulo.
Cómo se arregla. Usar odoo.tools.file_path para obtener la ruta o file_open para abrir el archivo.
Dónde lo verifiqué. get_module_resource no existe en el árbol de odoo 19; file_path sí está en odoo/tools/misc.py.
0 % de los repositorios · 0 hallazgos · Impide arrancar · se rompe desde la 18.0
Módulos de Python retirados en 3.12
Qué pasa. ImportError al cargar el módulo: esos paquetes ya no vienen con Python.
Cómo se arregla. distutils por packaging o shutil, imp por importlib, y el resto por su reemplazo en la biblioteca estándar.
Dónde lo verifiqué. La imagen oficial de odoo 19 corre sobre Python 3.12.3.