跳转到主要内容

针对由规范驱动的混入的工具(例如来自xsd的)

项目描述

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

简介

此模块是Odoo和XML数据的数据绑定框架:它允许从XML到Odoo对象,反之亦然。此模块从纯Python数据绑定框架GenerateDS开始,现在正在迁移到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 时,你可以继承以下嵌套 XML 标签(此处为 invoice.line.binding.mixin)对应的所有生成的 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 Pull Requests。

错误追踪器

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

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

致谢

作者

  • Akretion

贡献者

维护者

此模块由 OCA 维护。

Odoo Community Association

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

当前 维护者

rvalyi

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

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

项目详情


下载文件

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

源代码分发

本版本无源代码分发文件。请参阅生成分发存档的教程

构建分发

odoo14_addon_spec_driven_model-14.0.5.5.1-py3-none-any.whl (56.2 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面