напишите attribute_line_ids в product.tempate в odoo 12 - PullRequest
0 голосов
/ 26 мая 2020

я получаю данные полей из xls файла и создаю продукт все работает нормально, кроме поля one2many вариантов в product.template как я могу этого добиться. вот мой код.

main_product = self.env["product.template"].create(product_data)

attribute_ids = self.env["product.attribute"].search([])
attrib_id_set = set(ids.name for ids in attribute_ids)
product_attrib_ids = sheet.cell(suits, 13).value.split(",")

attrib_id_list = []; exist_attribute_list = []
for name in product_attrib_ids:
    if name not in attrib_id_set:
        attrib_id = self.env["product.attribute"].create({'name':name})
        attrib_id_list.append(attrib_id)
    else:
        exist_attribute = self.env["product.attribute"].search([('name','=',name)])
        exist_attribute_list.append(exist_attribute)

union_list = list(set(attrib_id_list).union(exist_attribute_list))

exist_attribute_values = self.env["product.attribute.value"].search([])
exist_attrib_val_list = [attrib_name.name for attrib_name in exist_attribute_values]

product_attrib_id_values = sheet.cell(suits, 14).value.split(",")
for value in product_attrib_id_values:
    if value not in exist_attrib_val_list:
        for ids in union_list:
            attrib_value_id = self.env["product.attribute.value"].create({
                'attribute_id':ids.id,
                'name':value
            })
            main_product.write({
                'attribute_line_ids':[(0,0,{
                    'attribute_id':ids.id, 'value_ids':(4,attrib_value_id.id)
                 })]
            })

product_data - мой словарь для таких полей, как name, sale_ok, type, catag_id et c. это работает, продукт создан, attribute_id и значения атрибутов даже работают но я не могу написать один2много вариантов в product.template.

- EDIT -

values_lst=[]
for value in product_attrib_id_values:
    if value not in exist_attrib_val_list:
        for ids in union_list:
            attrib_value_id = self.env["product.attribute.value"].create({
                'attribute_id':ids.id,
                'name':value
            })
    else:
        for ids in exist_attribute_values:
            if value == ids.name:
                attrib_value_id =self.env["product.attribute.value"].browse(ids.id)
                if attrib_value_id not in values_lst:
                    values_lst.append(attrib_value_id)
...