MyP*_*yPy 5 python xml-rpc openerp odoo-8 odoo-9
我正在尝试使用 python 通过 Odoo 的 xml-rpc api 导入一些 Product.templates 和它们的 product.variants。
实际上我的代码正在创建 Product.templates 及其 attribute.line.ids 非常好,但不知何故 product.variants 没有创建,所以只有一个 product.variant 被创建而没有任何属性。我不知道如何正确地做到这一点。
所以首先我创建一个 product.template 如下(为了使它简短,只在此处插入名称):
id = models.execute_kw(db, uid, password, 'product.template', 'create', [{
'name': "New Partner",
}])
Run Code Online (Sandbox Code Playgroud)
之后我像这样添加attribute.line.ids:
for key in attValIdList.keys():
attribute_line = models.execute_kw(db, uid, password, 'product.attribute.line', 'create', [{
'product_tmpl_id': id,
'attribute_id': key,
'value_ids': [(6, 0, attValIdList[key])]
}])
Run Code Online (Sandbox Code Playgroud)
所以 attValidKeys 是一个包含字典的列表,我在其中存储了 attribute_id 和它们的 attribute_value_id。
所以这部分被正确填充。但是没有 product.variants 从 product.line.ids 中创建出来。
实际上添加具有属性的 product.product 也工作正常,但后来我遇到了问题,这个没有任何属性的随机 product.product 是自动创建的..
如果你们能帮我解决这个问题,那就太好了。
Odoo.v12使用 python xml-rpc 创建产品变体
替换=> product_id=>您的产品ID,variant_name=>您的变体名称,variant_value=>您的变体值
product_tmpl_id=models.execute_kw(db, uid, password, 'product.product', 'read', [[[<product_id>]])[0].get('product_tmpl_id','')
temp_pro_dta=models.execute_kw(db, uid, password, 'product.product', 'read', [[[<product_id>]])[0].get('attribute_line_ids')
value_ids=models.execute_kw(db, uid, password, 'product.template.attribute.line', 'read', [temp_pro_dta])
attrib_ids=models.execute_kw(db, uid, password, 'product.attribute', 'search', [[['name', '=','<variant_name>' ]]])
if attrib_ids:
attrib_id=models.execute_kw(db, uid, password, 'product.attribute', 'read', [attrib_ids])[0].get('id')
else:
attrib_id=models.execute_kw(db, uid, password, 'product.attribute', 'create', [{"name":"<variant_name>",'create_variant':'always','type':'select'}])
attrib_value_ids=models.execute_kw(db, uid, password, 'product.attribute.value', 'search', [[['name', '=','<variant_value>'],['attribute_id','=',attrib_id]]])
if attrib_value_ids:
attrib_value=models.execute_kw(db, uid, password, 'product.attribute.value', 'read', [attrib_value_ids])[0].get('id')
else:
attrib_value=models.execute_kw(db, uid, password, 'product.attribute.value', 'create', [{"name":'<variant_value>','attribute_id':attrib_id}])
if value_ids:
value_data_ids=value_ids[0].get('value_ids')
if attrib_value not in value_data_ids:
value_data_ids.append(attrib_value)
attrib_key=models.execute_kw(db, uid, password, 'product.template.attribute.line', 'write', [value_ids[0].get('id'),{'value_ids':[[6,0,value_data_ids]]}])
else:
value_ids.append(attrib_value)
attrib_key=models.execute_kw(db, uid, password, 'product.template.attribute.line', 'create', [{"display_name":"<variant_name>",'product_tmpl_id':product_tmpl_id[0],'attribute_id':attrib_id,'value_ids':[[6,0,value_ids]]}])
Run Code Online (Sandbox Code Playgroud)