Introducción
Este módulo es un framework de enlace de datos para Odoo y datos XML: permite ir de XML a objetos de Odoo y viceversa. Aunque no tiene una dependencia estricta con él, ha sido diseñado para usarse junto con xsdata. Por lo tanto, un buen punto de partida es leer la documentación de xsdata aquí.
Pero, ¿y si en lugar de solo generar estructuras Python a partir de archivos XML pudieras generar objetos Odoo completos o serializar objetos Odoo de vuelta a XML? ¡Para esto sirve este módulo!
Primero deberías generar las librerías de enlace Python de xsdata que generarías para tu gramática XSD específica, la Facturación Electrónica Brasileña por ejemplo, o UBL o cualquier archivo XSD...
Segundo deberías generar mixins abstractos de Odoo para todos estos enlaces Python puros. Esto se puede lograr usando xsdata-odoo. Un ejemplo es OCA/l10n-brazil/l10n_br_nfe_spec para la Facturación Electrónica Brasileña.
SpecModel
Ahora que has generado estos enlaces abstractos de Odoo deberías indicarle a Odoo cómo usarlos. Por ejemplo, puede que quieras que tu modelo abstracto para el receptor de la factura electrónica coincida con el objeto res.partner de Odoo. Esto es bastante fácil, principalmente necesitas definir una sobrescritura como:
Ten en cuenta que deberías heredar de spec_models.SpecModel y no del habitual models.Model.
Mapeo de campos: Puedes entonces definir un mapeo bidireccional entre campos sobrescribiendo campos desde Odoo o desde el enlace usando _compute= , _inverse= o simplemente related=.
Campos relacionales: los campos simples se mapean fácilmente de esta manera. Sin embargo, ¿qué pasa con los campos relacionales? En tu esquema XSD, tu factura electrónica está relacionada con el partner.binding.mixin y no con un res.partner de Odoo. No te preocupes, cuando las clases SpecModel se instancian para todos los campos relacionales, buscamos si su comodel ha sido inyectado en algún modelo de Odoo existente y, de ser así, los reasignamos al modelo de Odoo adecuado.
Prefijos de campos: para evitar colisiones de campos entre los campos de Odoo y los campos XSD, los campos XSD se prefijan con el nombre del esquema y algunos dígitos que representan la versión del esquema (típicamente 2 dígitos). Así, si tu esquema recibe una actualización de versión menor, se usan los mismos campos y clases. Sin embargo, para una actualización mayor pueden usarse nuevos campos y clases, de modo que datos de varias versiones mayores podrían coexistir dentro de tu base de datos de Odoo.
StackedModel
Lamentablemente, el XML de la vida real es un poco más complejo que eso. A menudo las estructuras XML están profundamente anidadas simplemente porque hace más fácil que los esquemas XSD las validen. Por ejemplo, una línea de factura electrónica puede ser una estructura anidada con muchos detalles de impuestos y detalles de productos. Sin embargo, en un modelo relacional como Odoo a menudo quieres estructuras de datos más planas. ¡Aquí es donde StackedModel viene al rescate! Hereda de SpecModel y cuando heredas de StackedModel puedes heredar de todos los mixins generados correspondientes a las etiquetas XML anidadas bajo alguna etiqueta (aquí invoice.line.binding.mixin). Todos los campos correspondientes a estos atributos de etiquetas XML se recopilarán en tu modelo y el análisis y la serialización XML ocurrirán como se espera. Aquí hay un ejemplo inspirado en la Facturación Electrónica Brasileña donde el esquema se llama nfe y donde usamos los 2 dígitos 40 para su versión corta:
Todos los campos many2one que son requeridos en el XSD (xsd_required=True) obtendrán su modelo apilado automáticamente y de forma recursiva. También puedes forzar que los campos many2one no requeridos se apilen usando el atributo stacking_force_paths. Por el contrario, puedes evitar que algunos campos many2one requeridos se apilen usando el atributo stacking_skip_paths.
Hook de inicialización
Debido a que los esquemas XSD pueden definir muchos modelos diferentes, spec_driven_model viene con una práctica sobrescritura de _register_hook (en spec.mixin) que automáticamente hará que todos los mixins XSD se conviertan en modelos concretos de Odoo (por ejemplo, con una tabla) si no los has inyectado ya en modelos de Odoo existentes.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 18.0Permite que los modelos de Odoo se generen a partir de esquemas XML e intercambien datos con archivos XML en ambas direcciones, convirtiendo el XML analizado en registros de Odoo y los registros de Odoo de nuevo en XML.
Este es un módulo de base técnica para desarrolladores que trabajan con estándares XML (por ejemplo, esquemas de facturación electrónica). No añade menús ni pantallas para usuarios finales; proporciona bloques de construcción que otros módulos utilizan.
Qué permite: - Importación: un documento XML analizado se puede convertir automáticamente en registros de Odoo. El módulo recorre la estructura XML, crea o empareja registros relacionados (por ejemplo, contactos o países) en lugar de duplicarlos, y puede ejecutarse en modo de simulación que construye registros sin guardarlos. - Exportación: los registros existentes de Odoo se pueden convertir de nuevo en estructuras XML, incluyendo fechas, números formateados según los decimales del esquema y subregistros anidados. - Creación automática de modelos: los modelos basados en esquemas que no estaban vinculados a un modelo de Odoo existente se materializan en tiempo de carga, con sus tablas de base de datos y reglas de acceso de lectura/escritura por defecto creadas automáticamente.
Reglas de negocio y comportamientos que añade: - Cuando varios campos del esquema comparten la misma etiqueta, las etiquetas se hacen únicas automáticamente añadiendo el nombre del esquema y de la etiqueta, evitando las advertencias de etiquetas duplicadas de Odoo. - Los valores relacionados encontrados en el XML se copian a los campos correctos, y los campos de selección se rellenan automáticamente. - Los registros se buscan antes de crearse, de modo que las importaciones repetidas reutilizan los datos existentes.
Afecta a ir.model.fields y proporciona los modelos abstractos spec.mixin, spec.mixin_import, spec.mixin_export y spec.mixin_view.
Lo necesitan otros módulos
Modelos y campos (4)
- spec.mixin · modelo nuevo
- spec.mixin_view · modelo nuevo
- spec.mixin_export · modelo nuevo
- spec.mixin_import · modelo nuevo
Texto generado por IA (DeepSeek) al leer el código de la versión 18.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. El módulo es muy grande y solo se ha leído una parte del código. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 7 confirmadas, 2 sin información de 9 versiones.
Fuentes · Odoo 17.0
Confirmado el 2026-11-03 en la rama 17.0 de OCA/l10n-brazil.
terminal Instalación y uso
Documentación de OCA · Odoo 18.0Consulta mis explicaciones detalladas de OCA Days aquí:
También te animamos a que consultes el directorio tests, que incluye un ejemplo completo del famoso PurchaseOrder.xsd de los tutoriales de Microsoft.
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación, Configuración.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.