从python函数odoo创建外部标识符



我想从另一个模型中为模型'res.product'创建外部标识符。我尝试了以下代码,但没有生成与导出数据

时完全相同的代码。
collections=self.env['res.product'].search([('categ','=','nuts')])
if collections:

for col in collections:

postfix = 0
name = '%s_%s' % (col._table, col.id)
print("name",name)
ir_model_data = self.sudo().env['ir.model.data']
while ir_model_data.search([('module', '=', '__export__'), ('name', '=', name)]):
postfix += 1
name = '%s_%s_%s' % (col._table, 21, postfix)
ir_model_data.create({
'model': 'res.product',
'res_id': col.id,
'module': '__export__',
'name': name,
})

如果那条记录的ir.model.data已经存在,您应该更新它,而不是创建一个副本。

for col in self.env['res.product'].search([('categ','=','nuts')]):
ir_model_data = self.env['ir.model.data'].sudo().search([
('model', '=', 'res.product'),
('res_id', '=', col.id)
])
if ir_model_data:
ir_model_data.write({"name": "UNIVOQUE_EXTERNAL_ID"})
else:
self.env['ir.model.data'].create({
"model": "res.product",
"res_id": res.id,
"module": "__import__",
"name": "UNIVOQUE_EXTERNAL_ID"
})

您应该考虑在res.product模型的create函数中添加此逻辑。这样就不会太大了。

否则,如果是一次性操作,则考虑直接在数据库中执行SQL查询。

UPDATE ir_model_data SET name = 'UNIVOQUE_NAME' WHERE model = 'res.product' AND id = 123;

注意ir_model_data中的module属性表示记录是否通过data模块导入、导出或初始化。考虑使用模块名作为module,或者根据需要使用__import____export__标记。

最新更新