首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Odoo中重新计算存储的函数字段值?

如何在Odoo中重新计算存储的函数字段值?
EN

Stack Overflow用户
提问于 2015-12-04 21:23:35
回答 4查看 7.4K关注 0票数 9

有时必须重新计算存储的字段,但不能启动触发器(例如,在SQL注入的情况下)。

如何以一种简单的方式重新计算它们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-04 21:28:27

在v8.0中( 9.0中也应该可以),你可以这样做:

代码语言:javascript
复制
# 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

上面的代码可以直接在服务器动作中使用。

票数 6
EN

Stack Overflow用户

发布于 2016-10-19 04:18:25

(因为我是通过google来的:)

您也可以在Odoo Shell中执行此操作:

代码语言:javascript
复制
# 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模块可用。

票数 15
EN

Stack Overflow用户

发布于 2020-02-10 22:41:33

在v13中,上述语法仍然有效,但add_todo应替换为add_to_compute:

代码语言:javascript
复制
model = env['account.move']
env.add_to_compute(model._fields['amount_total'], model.search([]))
model.recompute()

要避免将所有对象加载到内存中,请改用ids:

代码语言:javascript
复制
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()
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34089393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档