我不断收到此错误,我错过了什么?
我尝试了多种方法,但总是收到此错误,我确信我错过了一些简单的东西。
图片链接中 Odoo 设置的示例图片
from odoo import api
x_studio_field_CKrxZ = fields.Float(compute='compute_product_dimension', store=True)
@api.depends('list_price','standard_price')
def compute_product_dimension(self):
for record in self:
record['compute_product_dimension'] = record.list_price + record.standard_price
Odoo 中的错误
ValueError: forbidden opcode(s) in "from odoo import api\r\nx_studio_field_CKrxZ = fields.Float(compute='compute_product_dimension', store=True)\r\[email protected]('list_price','standard_price')\r\ndef compute_product_dimension(self):\r\n for record in self:\r\n record['compute_product_dimension'] = record.list_price + record.standard_price \r\n": IMPORT_NAME, IMPORT_FROM
计算域函数在 Odoo 的
eval
沙盒实现(称为 safe_eval
)中执行。它禁止某些 Python 解释器操作码以防止任意代码执行。您收到的错误是因为 IMPORT_NAME
和 IMPORT_FROM
操作码 不允许(由 from odoo import api
语句引起)。
您不应该需要导入语句、字段声明、
@api.depends
装饰器或计算函数签名定义,您的计算方法应该如下所示:
for record in self:
record['x_studio_field_CKrxZ'] = record.list_price + record.standard_price
字段的依赖项不应在
@api.depends('list_price','standard_price')
中声明,而应在 Advanced Properties 下的 Dependencies 字段中声明,如屏幕截图中所示,您已经执行了该操作。
这不适用于您的具体情况,而是一般错误。
导致此错误的另一个原因是访问记录属性进行存储时。
for record in self:
record.somefield = record.someotherfield
结果不允许第一个引用:操作码是:
STORE_ATTR
第二个参考就可以了。
差点让我发疯,以为这两个人会受到平等对待。