用 on 函数计算两个字段

Calculate two fields with on function

我有这个计算 qty_incoming 的函数,但是有一个 outgoing_qty 字段我想用相同的函数计算,而不是为其计算创建单独的函数。我该怎么做?

 _columns = {
            '
            'incoming_qty': fields.function(_product_inc_out_qty, type='float',
                digits_compute=dp.get_precision('Product Unit of Measure'),
                string='Incoming'
            ),
            'outgoing_qty': fields.function(_product_inc_out_qty, type='float',
                digits_compute=dp.get_precision('Product Unit of Measure'),
                string='Outgoing'
            ),
        }

函数:

def _product_inc_out_qty(self, cr, uid, ids, field_names=None, arg=False, context=None):
        if context is None:
            context = {}

        res = {}
        for move_id in ids:
            move = self.browse(cr, uid, move_id, context=context)

            res[move.id] = move.product_id.incoming_qty or 0.0
        return res

如果我这样做,我会收到错误类型错误:float() argument must be a string or a number

  def _product_inc_out_qty(self, cr, uid, ids, field_names=None, arg=False, context=None):
        if context is None:
            context = {}

        res = {}
        vals = {
            'outgoing_qty': 0.0,
            'incoming_qty': 0.0,


        }
        for move_id in ids:
            move = self.browse(cr, uid, move_id, context=context)
            vals['outgoing_qty'] = move.product_id.qty_available or 0.0
            vals['incoming_qty'] = move.product_id.incoming_qty or 0.0
            res[move.id] = vals

        return res

多个fields can be computed同时通过相同的方法,只需对所有字段使用相同的方法并全部设置:

discount_value = fields.Float(compute='_apply_discount')
total = fields.Float(compute='_apply_discount')

@depends('value', 'discount')
def _apply_discount(self):
    for record in self:
        # compute actual discount from discount percentage
        discount = record.value * record.discount
        record.discount_value = discount
        record.total = record.value - discount

您可以在 sale_order

中找到旧 api 中的示例

我的代码中的问题是,在旧 API 中,如果您想 return 多个字段的值,您需要将 multi="any_string" 添加到您的字段

所以我的字段应该是这样的

'incoming_qty': fields.function(_product_inc_out_qty, type='float',
                digits_compute=dp.get_precision('Product Unit of Measure'),
                multi='all',
                string='Incoming'
            ),