跳转到主要内容

用于规范驱动的混合工具(例如从xsd)

项目描述

Beta License: LGPL-3 OCA/l10n-brazil Translate me on Weblate Try me on Runboat

简介

此模块是Odoo和XML数据的数据绑定框架:它允许从XML到Odoo对象以及反向转换。此模块从GenerateDS纯Python数据绑定框架开始,现在正在迁移到xsdata。因此,一个好的起点是阅读这里的xsdata文档

但如果除了从XML文件生成Python结构之外,您还能实际生成完整的Odoo对象或将Odoo对象反序列化为XML,那会怎么样?这正是此模块的作用!

首先,您应该为您的特定XSD语法生成xsdata Python绑定库,例如巴西电子发票或UBL。

其次,您应该为所有这些纯Python绑定生成Odoo抽象混合。这可以通过使用xsdata-odoo实现。例如,对于巴西电子发票,有OCA/l10n-brazil/l10n_br_nfe_spec。

SpecModel

现在您已经生成了这些Odoo抽象绑定,您应该告诉Odoo如何使用它们。例如,您可能希望您的电子发票抽象模型与Odoo res.partner 对象匹配。这相当简单,您主要需要定义一个重写,如

from odoo.addons.spec_driven_model.models import spec_models


class ResPartner(spec_models.SpecModel):
    _inherit = [
        'res.partner',
        'partner.binding.mixin',
    ]

注意您应该从spec_models.SpecModel继承,而不是通常的models.Model

字段映射:您可以通过覆盖来自Odoo或绑定的字段并使用_compute=_inverse=或简单地使用related=来定义两种字段映射方式。

关系字段:简单字段可以很容易地这样映射。但是关系字段怎么办?在您的XSD模式中,您的电子发票与partner.binding.mixin相关联,而不是与Odoo的res.partner相关联。不必担心,当为所有关系字段实例化SpecModel类时,我们会检查它们的comodel是否已注入到某些现有的Odoo模型中,如果是的话,我们将它们重新映射到正确的Odoo模型。

字段前缀:为了避免Odoo字段和XSD字段之间的字段冲突,XSD字段以模式名称和一些表示模式版本的数字(通常是两位数字)作为前缀。因此,如果您的模式进行小版本升级,将使用相同的字段和类。然而,对于主要升级,可能会使用新的字段和类,因此几个主要版本的数据可以在您的Odoo数据库中同时存在。

StackedModel

遗憾的是,现实生活中的XML比这复杂得多。通常,XML结构会深深地嵌套,因为这使得XSD模式更容易验证它们!例如,一个电子发票行可以是一个嵌套结构,包含大量的税项细节和产品细节。然而,在像Odoo这样的关系型模型中,您通常希望数据结构更扁平。这就是StackedModel发挥作用的地方!它继承自SpecModel,当您继承自StackedModel时,您可以继承对应于某些标签(这里为invoice.line.binding.mixin)下方嵌套XML标签的所有生成的mixins。所有对应于这些XML标签属性的字段都将收集到您的模型中,XML解析和序列化将按预期进行。

from odoo.addons.spec_driven_model.models import spec_models


class InvoiceLine(spec_models.StackedModel):
    _inherit = [
        'account.move.line',
        'invoice.line.binding.mixin',
    ]
    _stacked = 'invoice.line.binding.mixin'

所有在XSD中必需的many2one字段(xsd_required=True)都将自动递归地进行堆叠。您可以使用_force_stack_paths属性强制非必需的many2one字段堆叠。相反,您可以使用stack_skip属性避免一些必需的many2one字段堆叠。

钩子

由于XSD模式可以定义许多不同的模型,spec_driven_model提供了一些方便的钩子,这些钩子会自动将所有XSD mixins转换为具体的Odoo模型(例如带有表的模型),如果您没有将它们注入到现有的Odoo模型中。

目录

用法

请在此处查看我的详细OCA Days说明:https://www.youtube.com/watch?v=6gFOe7Wh8uA

还鼓励您查看测试目录,其中包含来自微软教程中著名的PurchaseOrder.xsd的完整示例。

已知问题/路线图

从generateDS迁移到xsdata;请查看存储库中的xsdata拉取请求。

错误跟踪器

错误在GitHub Issues上进行跟踪。如果遇到问题,请检查那里是否已报告您的问题。如果是您首先发现的问题,请通过提供详细且受欢迎的反馈来帮助我们解决它。

请不要直接联系贡献者以获取支持或帮助解决技术问题。

鸣谢

作者

  • Akretion

贡献者

维护者

此模块由OCA维护。

Odoo Community Association

OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并促进其广泛使用。

当前维护者

rvalyi

此模块是OCA/l10n-brazil项目在GitHub上的一部分。

欢迎您做出贡献。要了解如何进行,请访问https://odoo-community.org/page/Contribute

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

此版本没有可用的源分发文件。请参阅 生成分发存档的教程

构建分发

支持者: