在开发货运管理模块的时候,用到了两张表:主表[waybill]和明细表[waybill.detail],主表存放运单主体信息,明细表存放运单货物信息,如下图所示。

上图中红色方框标记的是明细表中行内的运费计算结果;蓝色圆圈标记的是主表中的总运费,是明细表中三条货品数据的运费总和。在odoo中是如何实现将明细表的数据统计结果赋值给主表字段的呢?

首先在主表中定义一个总运费[total_fees]字段和一个一对多的货运明细[detail_ids]字段,其中总运费total_fees的值来自一个计算函数_compute_total_fees,代码如下:

1
2
3
4
5
6
    total_fees = fields.Float(string='总运费', compute='_compute_total_fees', store=True)
    detail_ids = fields.One2many('waybill.detail', 'waybill_id', string='货运明细')
    @api.depends('detail_ids.total_freight')
    def _compute_total_fees(self):
        for waybill in self:
            waybill.total_fees = sum(waybill.detail_ids.mapped('total_freight'))

以上代码中total_freight是明细表中每条数据的运费合计,如此就实现了主表字段关联到明细表数据的统计结果。

点击链接查看完整源码:github

作者 菜园君