odoo 数据迁移:在 python 上通过 odoorpc 在多个价目表上输入一个产品
odoo datamigration: Enter one product on several pricelists via odoorpc on python
我正在研究 python 导入脚本,将数据从 xls sheet 导入到 odooErp。
在脚本中,对于不同的价目表(在本例中为 p1-p4),有 "name"、"if it is a bom list" 和(重要)"prices" 等信息。
我正在使用以下版本:
Odoo:社区 v.12
python:第 3.7.6 节
odoorpc:0.7.0
我的脚本已经能够在odoodb 中找到产品,获取一些xls 数据并将其写入odoodb 中的产品。
这些是名称、价格(这是标准价格)、类型等字段(标准 rpc 调用)
但是我无法管理将产品写入价目表或将价目表分配给产品。
我没有找到任何有关此步骤的文档,说明如何管理解决此问题的语法。
所以我试着这样做:
PricelistModel = odoo.env['product.pricelist']
pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
if pricelist:
p = PricelistModel.browse(pricelist)
item = {
'applied_on': '1_product',
'product_tmpl_id': product['id'], #<-- this is int also tried string
'compute_price': 'fixed',
'fixed_price': float(row[3]) #<--- this is int also tried string
}
p.write({
'item_ids':
item
})
不幸的是,即使没有显示任何错误并从函数中收到 "True",此调用也不成功并且什么也没做。
现在我的问题是:
我想用那个 odoorpc 做更多的事情,但是文档太短了,甚至没有触及我能想象到的所有可能性的表面。 -> 有没有办法打印出为什么 odoo 不写入数据库的答案,这样我就可以自学如何使用 odoo "talk"?
有谁知道解决这个问题的方法吗?
干杯,非常感谢您的宝贵时间:)
试试这个代码:
PricelistModel = odoo.env['product.pricelist']
pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
if pricelist:
item = {
'applied_on': '1_product',
'product_tmpl_id': product['id'], #<-- this is int also tried string
'compute_price': 'fixed',
'fixed_price': float(row[3]) #<--- this is int also tried string
}
# I assume the 'item' is a correct dictionary and the 'item_ids' is a One2many field, so you need an One2many special command
p.write({
'item_ids': [(0, False, item)]
})
你可以阅读https://www.odoo.com/documentation/13.0/reference/orm.html#create-update作为One2many特殊命令的参考
我正在研究 python 导入脚本,将数据从 xls sheet 导入到 odooErp。 在脚本中,对于不同的价目表(在本例中为 p1-p4),有 "name"、"if it is a bom list" 和(重要)"prices" 等信息。
我正在使用以下版本: Odoo:社区 v.12 python:第 3.7.6 节 odoorpc:0.7.0
我的脚本已经能够在odoodb 中找到产品,获取一些xls 数据并将其写入odoodb 中的产品。 这些是名称、价格(这是标准价格)、类型等字段(标准 rpc 调用) 但是我无法管理将产品写入价目表或将价目表分配给产品。 我没有找到任何有关此步骤的文档,说明如何管理解决此问题的语法。 所以我试着这样做:
PricelistModel = odoo.env['product.pricelist']
pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
if pricelist:
p = PricelistModel.browse(pricelist)
item = {
'applied_on': '1_product',
'product_tmpl_id': product['id'], #<-- this is int also tried string
'compute_price': 'fixed',
'fixed_price': float(row[3]) #<--- this is int also tried string
}
p.write({
'item_ids':
item
})
不幸的是,即使没有显示任何错误并从函数中收到 "True",此调用也不成功并且什么也没做。
现在我的问题是:
我想用那个 odoorpc 做更多的事情,但是文档太短了,甚至没有触及我能想象到的所有可能性的表面。 -> 有没有办法打印出为什么 odoo 不写入数据库的答案,这样我就可以自学如何使用 odoo "talk"?
有谁知道解决这个问题的方法吗?
干杯,非常感谢您的宝贵时间:)
试试这个代码:
PricelistModel = odoo.env['product.pricelist']
pricelist = PricelistModel.search([('name', '=', 'p1')], limit=1)
if pricelist:
item = {
'applied_on': '1_product',
'product_tmpl_id': product['id'], #<-- this is int also tried string
'compute_price': 'fixed',
'fixed_price': float(row[3]) #<--- this is int also tried string
}
# I assume the 'item' is a correct dictionary and the 'item_ids' is a One2many field, so you need an One2many special command
p.write({
'item_ids': [(0, False, item)]
})
你可以阅读https://www.odoo.com/documentation/13.0/reference/orm.html#create-update作为One2many特殊命令的参考