有时必须重新计算存储的字段,但无法启动触发器(例如,在SQL注入的情况下)。
如何轻松地重新计算它们?
答案 0 :(得分:9)
(因为我是通过谷歌来到这里的):
您也可以从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模块。
答案 1 :(得分:4)
在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
以上代码可直接用于服务器操作。
答案 2 :(得分:2)
在v13中,上述语法仍然有效,但应将add_todo替换为add_to_compute:
env.add_to_compute(model._fields['amount_total'], model.search([]))
model.recompute()
答案 3 :(得分:-1)
在odoo11
env.add_todo(model._fields['loading_time'], env['product.product'].search([]))
model.recompute()