为所有模型JSON化数据
项目描述
此模块为ORM中的每个模型添加一个“jsonify”方法。它作用于当前记录集,需要一个名为“parser”的单个参数,用于指定要提取的字段。
简单解析器示例
parser = [
'name',
'number',
'create_date',
('partner_id', ['id', 'display_name', 'ref'])
('line_id', ['id', ('product_id', ['name']), 'price_unit'])
]
为了与Odoo API保持一致,jsonify方法始终返回一个对象列表,即使记录集中只有一个元素。
默认情况下,JSON中的键是从模型中提取的字段名称。如果您需要指定一个替代名称作为键,您可以在解析器定义中定义您的映射
parser = [
'field_name:json_key'
]
parser = [
'name',
'number',
'create_date:creationDate',
('partner_id:partners', ['id', 'display_name', 'ref'])
('line_id:lines', ['id', ('product_id', ['name']), 'price_unit'])
]
如果您需要以自定义方式解析字段的值,您可以传递一个可调用对象或模型上的方法名称
parser = [
('name', "jsonify_name") # method name
('number', lambda rec, field_name: rec[field_name] * 2)) # callable
]
此外,该模块在ir.exports对象上提供了一个名为“get_json_parser”的方法,它可以从ir.exports配置生成解析器。
对于高级用法,还有更多功能可用。它定义了一个简单的“resolver”模型,该模型具有“python_code”字段和resolve函数,以便可以配置任意函数来转换字段或处理生成的字典。还可以指定一个语言以提取任何给定字段的翻译。
要使用这些功能,完整的解析器结构如下
parser = {
"resolver": 3,
"language_agnostic": True,
"langs": {
False: [
{'name': 'description'},
{'name': 'number', 'resolver': 5},
({'name': 'partner_id', 'target': 'partner'}, [{'name': 'display_name'}])
],
'fr_FR': [
{'name': 'description', 'target': 'descriptions_fr'},
({'name': 'partner_id', 'target': 'partner'}, [{'name': 'description', 'target': 'description_fr'}])
],
}
}
结果将具有以下结构(请注意,翻译字段合并到同一个字典中)
exported_json == {
"description": "English description",
"description_fr": "French description, voilà",
"number": 42,
"partner": {
"display_name": "partner name",
"description_fr": "French description of that partner",
},
}
请注意,解析器可以以记录集或ID的形式传递,以便完全序列化。如果不需要翻译字段,则有一个略微简化的版本,但其他功能如自定义解析器是有的。
parser = {
"resolver": 3,
"fields": [
{'name': 'description'},
{'name': 'number', 'resolver': 5},
({'name': 'partner_id', 'target': 'partners'}, [{'name': 'display_name'}]),
],
}
通过传递 fields 键而不是 langs,我们实际上具有与简单解析器相同的操作行为,同时增加了使用解析器的优点。
解析器的标准用例包括:- 为特定字段提供默认值(例如 “” 而不是 None)- 强制字段类型(例如 int())- 为特定导出别名字段 - …
简单解析器在导出时简单地转换为完整解析器。
如果提供了全局解析器,则json_dict将通过
resolver.resolve(dict, record)
这允许从上下文中添加外部数据或在必要时转换字典。同样,如果为字段提供了解析器,则解析器将评估结果。
目标可以通过以“=list”结束来具有打包器:在这种情况下,结果将被放入列表中。
parser = {
fields: [
{'name': 'name'},
{'name': 'field_1', 'target': 'customTags=list'},
{'name': 'field_2', 'target': 'customTags=list'},
]
}
这将产生以下JSON结构
{
'name': 'record_name',
'customTags': ['field_1_value', 'field_2_value'],
}
预期的用例是与需要同时导出所有翻译参数的API兼容,并要求将自定义属性放在子字典中。由于通常这些要求中的一些是可选的,因此可以满足新的要求,而无需添加字段或更改任何代码。
请注意,简单解析器导出的值取决于记录的lang;这与设计为语言无关的完整解析器形成对比。
注意:此模块在版本14.0.1.5.0之前被命名为 base_jsonify。
目录
用法
with_fieldname参数
jsonify()方法的with_fieldname选项,当为true时,将在数据相同级别注入“_fieldname_$field”键,其中包含当前用户的字段名称。
with_fieldname用法示例
# example 1
parser = [('name')]
a.jsonify(parser=parser)
[{'name': 'SO3996'}]
>>> a.jsonify(parser=parser, with_fieldname=False)
[{'name': 'SO3996'}]
>>> a.jsonify(parser=parser, with_fieldname=True)
[{'fieldname_name': 'Order Reference', 'name': 'SO3996'}}]
# example 2 - with a subparser-
parser=['name', 'create_date', ('order_line', ['id' , 'product_uom', 'is_expense'])]
>>> a.jsonify(parser=parser, with_fieldname=False)
[{'name': 'SO3996', 'create_date': '2015-06-02T12:18:26.279909+00:00', 'order_line': [{'id': 16649, 'product_uom': 'stuks', 'is_expense': False}, {'id': 16651, 'product_uom': 'stuks', 'is_expense': False}, {'id': 16650, 'product_uom': 'stuks', 'is_expense': False}]}]
>>> a.jsonify(parser=parser, with_fieldname=True)
[{'fieldname_name': 'Order Reference', 'name': 'SO3996', 'fieldname_create_date': 'Creation Date', 'create_date': '2015-06-02T12:18:26.279909+00:00', 'fieldname_order_line': 'Order Lines', 'order_line': [{'fieldname_id': 'ID', 'id': 16649, 'fieldname_product_uom': 'Unit of Measure', 'product_uom': 'stuks', 'fieldname_is_expense': 'Is expense', 'is_expense': False}]}]
错误跟踪器
错误在GitHub Issues上进行跟踪。如果遇到问题,请检查是否已报告您的问题。如果您首先发现它,请通过提供详细和受欢迎的反馈来帮助我们解决这个问题。
请不要直接联系贡献者以寻求支持或技术问题的帮助。
致谢
贡献者
BEAU Sébastien <sebastien.beau@akretion.com>
Raphaël Reverdy <raphael.reverdy@akretion.com>
Laurent Mignon <laurent.mignon@acsone.eu>
Nans Lefebvre <nans.lefebvre@acsone.eu>
Simone Orsi <simone.orsi@camptocamp.com>
Iván Todorovich <ivan.todorovich@camptocamp.com>
维护者
此模块由OCA维护。
OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。
此模块是GitHub上的OCA/server-tools项目的一部分。
欢迎您贡献力量。有关如何贡献的说明,请访问https://odoo-community.org/page/Contribute。
项目详情
散列值 for odoo14_addon_jsonifier-14.0.1.2.0-py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 79832d839c8e4b5490b50087f10b6d0e6164145ef5a075a1ac3966d009bb7ce6 |
|
MD5 | 33a6122fb488fb90f80a7294a5281ed6 |
|
BLAKE2b-256 | ed3c69bf1706532a8aa22910cf483a0acf94c4a2f0d2b54dd0c6fddf07f98296 |