跳转到主要内容

用于驱动混入的工具(例如从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 提供了便捷的钩子,如果未将它们注入到现有的 Odoo 模型中,将自动将所有 XSD mixins 转换为具体的 Odoo 模型(例如具有表的模型)。

目录

安装

配置

使用

请在此处查看我的详细 OCA Days 解释:[链接](https://www.youtube.com/watch?v=6gFOe7Wh8uA)

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

已知问题/路线图

从 generateDS 迁移到 xsdata;请参阅存储库中的 xsdata Pull Requests。

变更日志

错误跟踪器

错误在 GitHub Issues 上跟踪。如果遇到问题,请检查是否已报告了您的问题。如果是您首先发现的,请帮助我们通过提供详细且受欢迎的 [反馈](https://github.com/OCA/l10n-brazil/issues/new?body=module:%20spec_driven_model%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**) 来解决问题。

请不要直接联系贡献者寻求支持或技术问题的帮助。

鸣谢

作者

  • Akretion

贡献者

维护者

此模块由 OCA 维护。

Odoo Community Association

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

当前 维护者

rvalyi

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

欢迎您贡献力量。要了解如何贡献,请访问 [链接](https://odoo-community.org/page/Contribute)。

项目详情


下载文件

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

源代码分发

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

构建分发

由以下支持