Openerp 将onchange方法代码从V7迁移到V8

Openerp 将onchange方法代码从V7迁移到V8,openerp,odoo,openerp-8,odoo-8,Openerp,Odoo,Openerp 8,Odoo 8,我想用新的api将版本7中的销售订单行的产品标识变更方法迁移到版本8 一般来说,我看到我们不能转换新api中的onchange方法,这些方法的基本方法是用旧api编写的,当我们用super调用基本方法时,它会产生问题 我在执行此操作时出错,错误表示您已将15个参数传递给该方法,而需要19个参数 def product_id_change( self, cr, uid, ids, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False,

我想用新的api将版本7中的销售订单行的产品标识变更方法迁移到版本8

一般来说,我看到我们不能转换新api中的onchange方法,这些方法的基本方法是用旧api编写的,当我们用super调用基本方法时,它会产生问题

我在执行此操作时出错,错误表示您已将15个参数传递给该方法,而需要19个参数

def product_id_change( self, cr, uid, ids, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False, name='', partner_id=False,
        lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, context = None ):
这是使用旧api的方法声明。我想通过超级方法调用将这段代码完全保存在新的api中

实现这一目标有希望吗


任何帮助都将不胜感激。

您可以通过这种方式迁移到版本8

@api.multi
@api.onchange('product_id')
def product_id_change(self):
    if not self.product_id:
        return {'domain': {'product_uom': []}}

    vals = {}
    domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
    if not (self.product_uom and (self.product_id.uom_id.category_id.id == self.product_uom.category_id.id)):
        vals['product_uom'] = self.product_id.uom_id

    product = self.product_id.with_context(
        lang=self.order_id.partner_id.lang,
        partner=self.order_id.partner_id.id,
        quantity=self.product_uom_qty,
        date=self.order_id.date_order,
        pricelist=self.order_id.pricelist_id.id,
        uom=self.product_uom.id
    )

    name = product.name_get()[0][1]
    if product.description_sale:
        name += '\n' + product.description_sale
    vals['name'] = name

    if self.order_id.pricelist_id and self.order_id.partner_id:
        vals['price_unit'] = product.price
    self.update(vals)
    return {'domain': domain}