有时必须重新计算存储的字段,但不能启动触发器(例如,在SQL注入的情况下)。
如何以一种简单的方式重新计算它们?
发布于 2015-12-04 21:28:27
在v8.0中( 9.0中也应该可以),你可以这样做:
# Recompute amount_total for account.invoice
env.add_todo(model._fields['amount_total'], object)
model.recompute()
# where
# object - recordset of instances to recompute field for
# model - recordset instances model
上面的代码可以直接在服务器动作中使用。
发布于 2016-10-19 04:18:25
(因为我是通过google来的:)
您也可以在Odoo Shell中执行此操作:
# python odoo.py shell -c openerp-server.conf -d <database>
>>> model = env['account.invoice']
>>> env.add_todo(model._fields['amount_total'], model.search([]))
>>> model.recompute()
>>> env.cr.commit()
Odoo shell在9、10中可用,在8中通过OCA模块可用。
发布于 2020-02-10 22:41:33
在v13中,上述语法仍然有效,但add_todo应替换为add_to_compute:
model = env['account.move']
env.add_to_compute(model._fields['amount_total'], model.search([]))
model.recompute()
要避免将所有对象加载到内存中,请改用ids:
model = env['account.move']
ids = [x.get('id') for x in model.search_read(domain, ['id'])]
env.all.tocompute[model._fields['amount_total']].update(ids)
model.recompute()
https://stackoverflow.com/questions/34089393
复制相似问题