Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
问题是这样的 ,现有一张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的方法。
@api.depends
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