Вычислить два поля с помощью функции - PullRequest
1 голос
/ 18 апреля 2019

У меня есть эта функция, которая вычисляет 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

если я делаю что-то подобное, я получаю ошибку TypeError: аргумент float () должен быть строкой или числом

  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

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Несколько полей могут быть вычислены одновременно одним и тем же методом, просто используйте один и тот же метод для всех полей и установите все из них:

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

Вы можете найтипример в старом API в sale_order

0 голосов
/ 24 апреля 2019

Проблема в моем коде заключалась в том, что в старом API, если вы хотите вернуть значения для более чем 1 поля, вам нужно добавить 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'
            ),
...