Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
3 Răspunsuri
2020 Vizualizări

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

Imagine profil
Abandonează
Cel mai bun răspuns

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.

Imagine profil
Abandonează
Cel mai bun răspuns

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

Imagine profil
Abandonează
Cel mai bun răspuns

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

Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
3
iul. 25
1835
1
iul. 24
2847
2
oct. 23
2095
5
mai 24
17027
2
mar. 24
2181