2016-06-30 12 views
0

accounting->請求書私は、顧客(フィールド:partner_id:many2one)をリストから選択するためにonchange upponをトリガーしようとしていますが、フィールドにonchangeデコレータを追加すると失敗します。 "origin"(type:char)は正常に動作します。誰でも助けることができますか?Odoo 8:onchange manyone2one not working

NB:Odooデバッグモードでは、onchange_partner_id(type、...)と呼ばれるonchange関数にバインドされた顧客フィールドにマウスをドラッグしたときに表示されるヘルプメッセージ

ここで

コードです:私はあなただけPYでこのメソッドをオーバーライドする必要があるの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

を追加するよりも、元の請求書のモデルから継承します。

@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はあなたのケースでは既に働いているので働いています。

+0

おかげでEmipro、この関数はPARTNER_ID変更時にトリガーされたが、今、私はこのバグを持って:[...、自己(new_apiを返します* args、** kwargs)TypeError:onchange_partner_id()は、キーワード引数 'date_invoice'に対して複数の値を取得しました。私がPyhon 2.7を使用していることに注意してください。また、私はスーパークラスのメソッドシグネチャを検証し、7引数です。新しい請求書を開くと、バグが発生します(デフォルト値でコードを解析する) – Salim

+0

コードを教えてもらえますか?あなたが質問にそれを加えることができるなら、それは良いことです。 –

+0

スーパーを呼び出すコードを追加しました – Salim

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") 
+0

メソッドが呼び出される場所の数が分からないので、superを呼び出すことを常にお勧めします。必要がない限り完全に上書きしないようにしてください。既に関数にベースコードが追加されていると思いますが、先に進まずにその実行チャネルを破ることになります。 –

+0

あなたは正しいです、スーパーを呼び出すことは常に良いです – Salim