I am working on a product importing tool, that imports data through XMLRPC into my Odoo 18 database. I am well on the way, except getting the Attribute lines has some mysteries for me.
I have created an product.attribute
and product.attribute.value
, which are are all OK. Now, to connect this to a product, I have to create a product.template.attribute.line
which has an attribute_id
and an array of value_ids
. So far so good, however, to prevent creating too many items, I first want to check if such a line already exists. To do so, I have now this:
existing_line_ids = self.models.execute_kw(self.database, self.uid, self.apikey, 'product.template.attribute.line', 'search', [[["value_ids","any",[value_id]],["attribute_id", "=", attribute_id]]])
But this gives me an error:
ValueError: not enough values to unpack (expected 3, got 1)
How can I search for a line that has a specific attribute_id
and value_id
set?
PS
This is the complete backtrace of the error:
xmlrpc.client.Fault: <Fault 1: 'Traceback (most recent call last):\n File "/home/odoo/src/odoo/odoo/addons/base/controllers/rpc.py", line 161, in xmlrpc_2\n response = self._xmlrpc(service)\n ^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/addons/base/controllers/rpc.py", line 139, in _xmlrpc\n result = dispatch_rpc(service, method, params)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/http.py", line 398, in dispatch_rpc\n return dispatch(method, params)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/service/model.py", line 39, in dispatch\n res = execute_kw(db, uid, *params[3:])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/service/model.py", line 61, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/service/model.py", line 68, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/service/model.py", line 52, in execute_cr\n result = retrying(partial(odoo.api.call_kw, recs, method, args, kw), env)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/service/model.py", line 137, in retrying\n result = func()\n ^^^^^^\n File "/home/odoo/src/odoo/odoo/api.py", line 517, in call_kw\n result = getattr(recs, name)(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/models.py", line 1717, in search\n return self.search_fetch(domain, [], offset=offset, limit=limit, order=order)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/models.py", line 1741, in search_fetch\n query = self._search(domain, offset=offset, limit=limit, order=order or self._order)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/models.py", line 5754, in _search\n query = self._where_calc(domain)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/models.py", line 5505, in _where_calc\n return expression.expression(domain, self).query\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/osv/expression.py", line 781, in __init__\n self.expression = domain_combine_anies(domain, model)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/osv/expression.py", line 599, in domain_combine_anies\n domain_any = _anyfy_leaves(domain, model)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/osv/expression.py", line 381, in _anyfy_leaves\n result.append((left, operator, _anyfy_leaves(right, comodel)))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/home/odoo/src/odoo/odoo/osv/expression.py", line 366, in _anyfy_leaves\n left, operator, right = item = tuple(item)\n ^^^^^^^^^^^^^^^^^^^^^\nValueError: not enough values to unpack (expected 3, got 1)\n'>