odoo计算字段重新计算odoo recompute

24 篇文章 0 订阅
23 篇文章 1 订阅

odoo计算字段如果是store=True存在数据库中的,不通过depends绑定的字段变化去触发计算,又想让计算字段重新计算一次值的时候,可以使用如下两种方法触发重新计算

原理: 两种方法的原理都是通过api.py中定义的add_todo和recompute()方法触发字段的重新计算,

add_todo函数的第一个参数需要传入一个字段对象,第二个参数是需要重新计算的记录

推荐方法3

方法1: odoo脚本运行模式,即odoo shell模式

>>> model = env['模型名称']
>>> env.add_todo(model._fields['计算字段名'], model.search([]))
>>> model.recompute()
>>> env.cr.commit()

方法2: 定义一个动作去调用后端代码,触发recompute

动作代码:

<record id="动作id" model="ir.actions.server">
    <field name="name">更新部门全称</field>
    <field name="model_id" ref="model_模型名"/>
    <field name="binding_model_id" ref="model_模型名"/>
    <field name="state">code</field>
    <field name="is_button">False</field>
    <field name="code">
        action = model.recompute_compute_field()
    </field>
</record>

 后端代码:

@api.multi
def recompute_compute_field(self):
    """
    触发重新计算完整名称
    """
    model = self.env['计算字段所在模型名']
    self.env.add_todo(model._fields['计算字段名'], self.search([]))
    model.recompute()
    self._cr.commit()

方法3: 在系统中定义一个定时任务手动执行触发计算字段重新计算,好处是用户无法在动作中看到,避免误操作

        在系统中打开debug模式,在设置菜单->技术->动作->安排的动作中新建一条记录,  调用方法2中写的后端方法, 然后保存点击立即执行按钮

注意: 定时任务不要把右上角的激活打开,  不然会频繁执行, 造成服务器负担, 执行完可以将定时任务删除

如图:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值