Перейти к содержимому
Меню
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Этот вопрос был отмечен
3 Ответы
1282 Представления

I am trying to add attributes to a product using XMLRPC, but I am quite struggling with how it all fits together.


My goal is as follows:

In the backend, I can use the "Add a line" on a product in the "Attributes & Variants" tab.


And I can then easily create both the attribute, and the value.


I want to do all that using XMLRPC, where of course I want to check if a certain attribute already exists on the product, or in general.


I have this code to check if an product.template.attribute.line​ exists, and try to create it, if not. However, it complains that I must set at least one value (but how?):


``` def get_attribute_line_id(self, product_template_id, attribute_id, value_id, create = True):

existing_line_ids = self.models.execute_kw(

self.database, self.uid, self.apikey, 'product.template.attribute.line', 'search', [[["value_ids.id", "=", value_id], ["attribute_id", "=", attribute_id], ["product_tmpl_id", "=", product_template_id]]])

def get_attribute_line_id(self, product_template_id, attribute_id, value_id, create = True):

existing_line_ids = self.models.execute_kw(

self.database, self.uid, self.apikey, 'product.template.attribute.line', 'search', [[["value_ids.id", "=", value_id], ["attribute_id", "=", attribute_id], ["product_tmpl_id", "=", product_template_id]]])


if create == True and len(existing_line_ids) == 0:

line_id = self.models.execute_kw(self.database, self.uid, self.apikey, 'product.template.attribute.line', 'create', [{'attribute_id': attribute_id, 'value_ids': [value_id], 'product_tmpl_id': product_template_id}])

existing_line_ids = [line_id]


return existing_line_ids


The value_id​was created in this method:

def get_attribute_line_id(self, product_template_id, attribute_id, value_id, create = True):

existing_line_ids = self.models.execute_kw(

self.database, self.uid, self.apikey, 'product.template.attribute.line', 'search', [[["value_ids.id", "=", value_id], ["attribute_id", "=", attribute_id], ["product_tmpl_id", "=", product_template_id]]])


if create == True and len(existing_line_ids) == 0:

line_id = self.models.execute_kw(self.database, self.uid, self.apikey, 'product.template.attribute.line', 'create', [{'attribute_id': attribute_id, 'value_ids': [value_id], 'product_tmpl_id': product_template_id}])

existing_line_ids = [line_id]


return existing_line_ids

Аватар
Отменить
Лучший ответ

Hiii,

Updated Working Code

Here's how your method should look:

def get_attribute_line_id ( self, product_template_id, attribute_id, value_id, create= True ): # Search for existing attribute line on the product existing_line_ids = self.models.execute_kw( self.database, self.uid, self.apikey, 'product.template.attribute.line' , 'search' , [[ [ 'product_tmpl_id' , '=' , product_template_id], [ 'attribute_id' , '=' , attribute_id], [ 'value_ids' , 'in' , [value_id]] ]] ) # If it doesn't exist and creation is allowed, create it if create and not existing_line_ids: line_id = self.models.execute_kw( self.database, self.uid, self.apikey, 'product.template.attribute.line' , 'create' , [{ 'product_tmpl_id' : product_template_id, 'attribute_id' : attribute_id, 'value_ids' : [( 6 , 0 , [value_id])] }] ) existing_line_ids = [line_id] return existing_line_ids

I hope it is of full use.

Аватар
Отменить
Лучший ответ

Hi, please check this: https://youtu.be/Cmbo2iGuTBY 
Hope it helps.

Аватар
Отменить
Лучший ответ

Why not configure the log file to show the XMLRPC calls Odoo makes via the Website and copy them?

https://www.odoo.com/forum/help-1/how-can-i-see-which-api-calls-are-made-to-learn-what-odoo-is-doing-at-specific-times-183911

Аватар
Отменить
Related Posts Ответы Просмотры Активность
2
июл. 25
1201
1
июл. 24
2288
2
окт. 23
2017
5
мая 24
16485
2
мар. 24
1608