Odoo 9.0使用python xml-rpc创建产品变体

时间:2016-12-12 08:21:23

标签: python openerp odoo-8 xml-rpc 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", 
}])

之后我添加了这样的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会自动创建..

如果你们能帮我解决这个问题会很好,在这个问题上花费了很多时间。

1 个答案:

答案 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]]}])