Contenido
Contexto:
Durante el desarrollo del proyecto de Bolipuertos, se implementó un método computado que actualizaba varios campos del modelo. Estos campos estaban definidos con @api.depends
correctamente, pero no todos eran iguales: algunos estaban marcados con store=True
, otros no.
Qué salió mal:
El método computado no se ejecutaba automáticamente como se esperaba cuando cambiaban los valores de los campos dependientes. Solo se disparaba si se recargaba manualmente la vista, lo cual provocaba que los valores se vieran inconsistentes o simplemente no se actualizaran a tiempo.
Causa raíz:
Odoo no ejecuta automáticamente métodos computados no almacenados (**store=False**
) en el backend a menos que haya una interacción directa con la vista o el frontend. Además, al combinar campos store=True
y store=False
que dependen del mismo método, se genera un comportamiento impredecible.
El @api.depends
no puede controlar correctamente los triggers si los campos no están sincronizados en su política de almacenamiento.
Solución o recomendación:
-
Evitar mezclar campos computados
**store=True**
y**store=False**
con el mismo método. -
Separar los métodos si es necesario: uno para campos almacenados, otro para no almacenados.
-
Si se requiere una actualización visual inmediata en la vista, considerar el uso de
@api.onchange
para campos no almacenados. -
Siempre validar que el método se ejecute correctamente en escenarios reales, no solo al editar desde el frontend.
Responsable del aprendizaje:
Jose Daniel Mancilla
Fecha del aprendizaje:
2025-03-15
🧪 Nota técnica: Cuando un campo no es
store=True
, su método computado solo se ejecuta en cliente (vista/formulario). Odoo no lo calcula automáticamente en el backend durante operaciones como creación, escritura o cargas masivas. Eso lo convierte en un ninja invisible cuando más lo necesitas.