用于驱动混入的工具(例如从xsd)
项目描述
简介
此模块是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**) 来解决问题。
请不要直接联系贡献者寻求支持或技术问题的帮助。
鸣谢
贡献者
-
Raphaël Valyi <raphael.valyi@akretion.com.br>
KMEE:
Gabriel Cardoso de Faria <gabriel.cardoso@kmee.com.br>
维护者
此模块由 OCA 维护。
OCA,或 Odoo 社区协会,是一个非营利组织,其使命是支持 Odoo 特性的协作开发并促进其广泛使用。
当前 维护者
此模块是 GitHub 上 OCA/l10n-brazil 项目的组成部分。
欢迎您贡献力量。要了解如何贡献,请访问 [链接](https://odoo-community.org/page/Contribute)。
项目详情
哈希值 for odoo_addon_spec_driven_model-16.0.1.2.2-py3-none-any.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | a753457b468d184644e3c712decfebaed22a68edbfad93e404369c1a9c703015 |
|
| MD5 | 3bac0e704b998271b993b4a061f5f616 |
|
| BLAKE2b-256 | 878adca599775250fe7f0fb7aacffb38c3f7d640ab9122bebc5802f4a142d4a4 |