Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

请问odoo depends 的触发



  • 问题是这样的 ,现有一张A表,B表和C表。B表和C表都有A表的id,B表和C表之间唯一的关联就是A_id。 我现在要对C表中的一些数据进行计算,并将之存储与B表中,通过A_id进行search。 请问现在depends该如何处理呢,怎样做到C表中用于计算的字段一旦发生变化,就会执行计算函数,并且更新到B表中。



  • @曹伯纯
    我这样想,你看可以不。
    1、比如模型C中需要计算的字段是c,依据变化的字段是c1,c2,这个按平常的@api.depends写就行。
    2、第一步以后字段c的值发生改变了,同时你要更新模型B的b字段的值,查询出符合你修改条件的B,然后调用B的write的方法。

    至于你说的通过A_id进行search,这个没懂,是这些变化的字段里面有跟A_id 相关的吗?没有这些计算,也可以通过A_id进行search的呀。



  • @api.multi
    @api.depends('c1','c2')
    def _compute_qty(self):
    for rec in self:
    b = self.env['B'].search([('A_id','=',rec.A_id.id)])
    qty = rec.c1 + rec.c2
    b.b = qty

    compute = "_compute_qty" 应该放在哪里呢 @hui



  • @曹伯纯
    compute = "_compute_qty" 应该放在qty这个字段里面,例如:

    qty = fields.Char('Protection Type-Color',                                              compute='_compute_qty')
       
    

    再者b.b=qty这个有问题不?



  • 这里要新建一个qty字段用来存储计算后的字段吗,那B表中write方法还是要等B表操作才会更新计算值啊@hui



  • 这里是不是应该调用C中的write方法 @hui



  • @曹伯纯
    1、你不是要计算一些数据,不是根据已有的字段c1,c2计算出字段c吗,你看你具体的要求,需不需要再重写一个字段?
    2、要write的话,就是

    @api.multi
    @api.depends('c1','c2')
    def _compute_qty(self):
        for rec in self:
            b = self.env['B'].search([('A_id','=',rec.A_id.id)])
            qty = rec.c1 + rec.c2
            b.write({'b': qty})
    


  • 有点明白了 还是代码直观 我去试试看 @hui 谢谢



  • @曹伯纯
    是更新哪个表,就是哪个表write啊,你不是要更新b表的数据吗?所以要b write


Log in to reply