Odoo 8:onchange many2one无法正常工作

时间:2016-06-30 09:45:46

标签: openerp onchange odoo-8 invoice accounting

在会计 - >发票我尝试触发onchange从列表中选择一个客户(字段:partner_id:many2one),但它失败了,而在字段上添加了onchange装饰器"原点" (type:char)正常工作。有人可以帮忙吗?

注意:在Odoo调试模式下,将鼠标拖到客户字段上时显示的帮助消息显示它被绑定到一个名为onchange_partner_id(type,...)的onchange函数,我想知道这是不是问题

以下是代码:我继承原始发票模型而不是添加onchange功能

class stock_picking(models.Model):
_inherit = "account.invoice"

#NOT triggered
@api.onchange('partner_id')
def _onchange_customer(self):
    print("debug:y_account_invoice: _onchange_customer:selected")

#triggered successfully    
@api.onchange('origin')
def _onchange_origin(self):
    print("debug:y_account_invoice: _onchange_origin")

2 个答案:

答案 0 :(得分:2)

您只需要在py。

中覆盖此方法
@api.multi
def onchange_partner_id(self, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
    res = super(classname, self).onchange_partner_id(type, partner_id, date_invoice=date_invoice,payment_term=payment_term, partner_bank_id=partner_bank_id, company_id=company_id)
    #### Update your code 
    # If you want to set any fields value then just simply update it in res and return res
    res['value'].update({'account_id': new_value,})
    return res

onchange_partner_id 已经存在,您需要覆盖它,不要再次定义它。并且 _onchange_origin 在您的情况下工作,因为它已经没有了。

答案 1 :(得分:1)

我找到了一个替代解决方案(不理想)。我已经将整个函数从account_invoice核心覆盖到我继承自它的自定义模块,然后在其上添加了我的自定义代码。这样就可以正常触发更改功能的伙伴。(省略超级呼叫)

  #overwritten function
  @api.multi
  def onchange_partner_id(self, type, partner_id, date_invoice=False,
        payment_term=False, partner_bank_id=False, company_id=False): 
     #KEEP the Core Code
     #custom code
     #add the sales person to the result in case it was not False
     if user_id_sales_per != False:
        print("Debug:account.invoice.onchange_partner_id(): my custom code")