我正在尝试使用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",
}])
之后我添加了这样的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])]
}])
所以attValidKeys是一个带字典的列表,我在其中存储了attribute_id及其attribute_value_ids。
因此这部分被正确填充。 但是没有product.variants是从product.line.ids创建的。
实际上添加带有属性的product.product工作正常,但是我遇到了问题,这个没有任何属性的随机product.product会自动创建..
如果你们能帮我解决这个问题会很好,在这个问题上花费了很多时间。
答案 0 :(得分:0)
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]]}])