如何使用odoo 9中的onchange事件对treeview行中的值求和

时间:2016-09-26 10:45:32

标签: python openerp odoo-9

我有一个父模型和一个子模型,这里是代码:

class parent_model(osv.osv):
    _name = 'parent_model'
    _columns = {
        'line_ids'      : fields.one2many('child_model', 'line_id', 'Line ID', ondelete='cascade'),
        'description'   : fields.text('Description', required=True),
        'grand_total'   : fields.float('Grand Total'),
    }

class child_model(osv.osv):
    _name = 'child_model'
    _columns = {
        'line_id'       : fields.many2one('parent_model', string='Line ID', required=True),
        'item'          : fields.char('Item', required=True),
        'amount'        : fields.float('Amount', required=True),
        'qty'           : fields.integer('Qty', required=True),
        'subtotal'      : fields.float('Total', readonly=True),
    }

    def get_subtotal(self, cr, uid, ids, num1, num2, context=None):
        res = {}
        if num1 and num2:
            res['subtotal'] = num1 * num2
        return {'value': res}

在child_model中,我成功地在事件get_subtotal中乘以“amount”和“qty”,这里是xml:

<tree >
    <field name="item" />
    <field name="amount" on_change="get_subtotal(amount, qty)" />
    <field name="qty" on_change="get_subtotal(amount, qty)" />
    <field name="subtotal" />
</tree>

我的问题是如何在child_model中计算(求和)小计,并使用onchange事件将值存储在parent_model中的grand_total字段中。 需要帮助,谢谢

1 个答案:

答案 0 :(得分:1)

第一:将一切都移到新的api。

将onchange 添加到与line_ids挂钩的父模型,例如: @api.onchange('line_ids') def _onchange_line_ids(self):