自动将 Odoo 模型转换为数据模型以进行(反)序列化
项目描述
该模块利用数据模型模块中引入的概念来提供类似于Django REST 框架中的ModelSerializer (的子集)的机制。也就是说,使用 Odoo 模型的定义来部分自动化相应Datamodel类的定义。
目录
<nav class="contents local" id="contents" role="doc-toc"> </nav>用法
ModelSerializer班级
该类ModelSerializer继承自Datamodel该类并添加了功能。因此,任何继承自的类ModelSerializer都可以以与任何其他类完全相同的方式使用Datamodel。
基本用法
这是一个基本示例:
from odoo.addons.model_serializer.core import ModelSerializer
class PartnerInfo(ModelSerializer):
_name = "partner.info"
_model = "res.partner"
_model_fields = ["id", "name", "country_id"]
结果等价于以下Datamodel类:
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
from odoo.addons.datamodel.fields import NestedModel
class PartnerInfo(Datamodel):
_name = "partner.info"
id = fields.Integer(required=True, allow_none=False, dump_only=True)
name = fields.String(required=True, allow_none=False)
country = NestedModel("_auto_nested_serializer.res.country")
class _AutoNestedSerializerResCountry(Datamodel):
_name = "_auto_nested_serializer.res.country"
id = fields.Integer(required=True, allow_none=False, dump_only=True)
display_name = fields.String(dump_only=True)
覆盖字段定义
可以像这样覆盖字段的默认定义:
from odoo.addons.model_serializer.core import ModelSerializer
class PartnerInfo(ModelSerializer):
_name = "partner.info"
_model = "res.partner"
_model_fields = ["id", "name", "country_id"]
country_id = NestedModel("country.info")
类 CountryInfo(ModelSerializer):
_name = "国家信息"
_model = "res.country"
_model_fields = [“代码”,“名称”]
在此示例中,我们覆盖了 aNestedModel但它对任何其他字段类型的工作方式相同。
(反)序列化
ModelSerializerDatamodel完成将实例转换为对应
的所有繁重工作recordset,反之亦然。
要将记录集转换为(列表)ModelSerializer实例(序列化),请执行以下操作:
partner_info = self.env.datamodels["partner.info"].from_recordset(partner)
这将返回一个实例;如果您的记录集包含多个记录,则可以通过传递many=True给此方法来获取实例列表。
要将ModelSerializer实例转换为记录集(反序列化),请执行以下操作:
partner = partner_info.to_recordset()
除非可以找到现有的合作伙伴(见下文),否则此方法会在数据库中创建一条新记录。您可以通过传递来避免create=False这种情况,在这种情况下,系统只会在内存(NewId记录集)中创建它们。
为了确定对应的 Odoo 记录是否已经存在或者是否应该创建一个新记录,系统默认检查id实例的字段是否对应于数据库记录。可以像这样修改此默认行为:
class CountryInfo(ModelSerializer):
_name = "country.info"
_model = "res.country"
_model_fields = ["code", "name"]
def get_odoo_record(self):
if self.code:
return self.env[self._model].search([("code", "=", self.code)])
return super().get_odoo_record()
变更日志
14.0.1.0.0
第一个正式版。
错误追踪器
在GitHub 问题上跟踪错误。如果遇到问题,请检查您的问题是否已被报告。如果您首先发现它,请通过提供详细且受欢迎的 反馈来帮助我们粉碎它。
不要就技术问题的支持或帮助直接联系贡献者。
学分
贡献者
弗朗索瓦·德格雷夫 < f . 贬低@wakari 。_ 成为>
维护者
该模块由 OCA 维护。
OCA 或 Odoo 社区协会是一个非营利组织,其使命是支持 Odoo 功能的协作开发并促进其广泛使用。
当前维护者:
该模块是GitHub 上OCA/rest-framework项目的一部分。
欢迎您贡献。要了解如何,请访问https://odoo-community.org/page/Contribute。
项目详情
odoo14_addon_model_serializer -14.0.1.0.1-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 3de9a1e7d7937999dc583d5ed4b7339339594e1ec88d875b96eff0e51815596a |
|
| MD5 | b95ce8e7cf37aaa941bb1c75b1de0f66 |
|
| 布莱克2-256 | 5e94bb08291863c1c23ba24c9b92b258a7c424c601032ad2ce86e31baea596b8 |