Odoo:将res.company对象导出为JSON

5
company = self.env['res.company'].search([('id', '=', 1)])
print company.name # prints 'my company' which is correct
print json.dumps(company) # error TypeError: res.company(1,) is not JSON serializable

问题是如何将company对象简单地导出为json格式?

我正在寻找一种通用的方法,适用于任何模型。


1
我也在寻找这个。这真是太疯狂了,竟然会如此麻烦。作为一个 JavaScript 背景的开发者,这很令人沮丧,因为在开发过程中无法获得正在处理的对象的读取。有没有解决方法?!! - Ragav Y
4个回答

3
使用Model.read()方法。您还可以在read方法中指定要读取的字段(请参阅文档)。此外,datetime对象不能被JSON序列化。幸运的是,Odoo已经提供了一个实用方法。
import json
from odoo.tools import date_utils

raw_data = company.read()
json_data = json.dumps(raw_data, default=date_utils.json_default)
print(json_data)

1

请尝试使用这段代码:

company = self.env['res.company'].search([('id', '=', 1)])
print company.name
print json.dumps(company.name)

1
我想要转储整个对象,而不仅仅是名称字段。 - user1

0

最后一个答案(Jerther)是正确的答案。

在odoo 16中也可以使用。

from odoo.tools import json_default

替代

from odoo.tools import date_utils

0

搜索将返回对象,因此我们必须手动向字典添加字段以构建Json。我已经添加了一些字段,您可以添加更多字段。

company = self.env['res.company'].search([('id', '=', 1)])
params = {}
data = dict()
data['partner_id'] = company.partner_id
data['name'] = company.name
data['email'] = company.email
data['phone'] = company.phone
data['company_registry'] = company.company_registry
params['params'] = data
print json.dumps(params)

这很粗糙。我正在寻找的解决方案应该自动读取所有字段名称并将它们作为键,读取这些字段的值并将它们分配给相应的键,并准备JSON。一种通用函数。 - user1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接