I'm using the SaaS version. I'm trying to create a relatively simple calculated field using Odoo Studio.
A field called x_studio_value_c should be the sum of x_studio_value_a and x_studio_value_b.
In Odoo Studio, I've confirmed that each field is of type FLOAT, and I've added the following code:
for record in self:
record.x_studio_value_c = record.x_studio_value_a + record.x_studio_value_b
When I modify the value of 'a', I receive the following error:
Traceback (most recent call last):
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2266, in _serve_db
return service_model.retrying(serve_func, env=self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/service/model.py", line 184, in retrying
result = func()
^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2313, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 2528, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/addons/base/models/ir_http.py", line 357, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/http.py", line 788, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/addons/web/controllers/dataset.py", line 32, in call_kw
return call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/service/model.py", line 93, in call_kw
result = method(recs, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 2107, in onchange
if field_name not in done and snapshot0.has_changed(field_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 2219, in has_changed
return self[field_name] != self.record[field_name]
~~~~~~~~~~~^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 6680, in __getitem__
return self._fields[key].__get__(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1660, in __get__
self.recompute(record)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1886, in recompute
apply_except_missing(self.compute_value, recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1856, in apply_except_missing
func(records)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1910, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 476, in _compute_field_value
return super()._compute_field_value(field)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 84, in determine
return needle(records, *args)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/addons/base/models/ir_model.py", line 50, in func
return safe_eval(text, SAFE_EVAL_BASE | {'self': self}, mode="exec")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/19.0/odoo/tools/safe_eval.py", line 394, in safe_eval
assert_valid_codeobj(_SAFE_OPCODES, c, expr)
File "/home/odoo/src/odoo/19.0/odoo/tools/safe_eval.py", line 237, in assert_valid_codeobj
raise ValueError("forbidden opcode(s) in %r: %s" % (expr, ', '.join(opname[x] for x in (code_codes - allowed_codes))))
ValueError: forbidden opcode(s) in 'for record in self:\r\n record.x_studio_value_c = record.x_studio_value_a + record.x_studio_value_b': STORE_ATTR
Does anyone have any ideas?
"Compute Field" is not a question. A question is a substantial phrase that ends with "?"
We get close to 1,000 posts a month and not everyone will open a post to find out what your question is.
I have edited your post to make the title a question.
In the future, please consider (1) using a Question that makes it clear what you ask without requiring people to open your post and (2) adding Tags. This will often increase the chances people will respond and also make everything clearer for others who may come along later searching for the same thing.
Failing that, you can paste your future posts into an AI Chatbot and ask it to "please generate a question of no more than 16 words that summarizes what I am asking" and use that as your question.
See also https://www.odoo.com/forum/help-1/meta-why-do-some-questions-get-answers-and-others-do-not-25620