私は、既存のonchangeメソッドにいくつかの機能を追加しようとしています。これはv7で宣言されており、v8を使用したいと思います。方法はstock.move
のonchange_product_id
です。新しいAPIを使用してv7のonchangeメソッドを上書きする方法は?
私はv7 onchangeメソッドを宣言しています(上書きしたいv7メソッドと同じ名前)。影響を受けたフィールドproduct_id
を再宣言しました。もしそうでなければ、私のonchangeメソッドは呼び出されません(再定義では、元の宣言から残りの属性を取得する予定があるため、コモデル名のみを設定しています)。
これは私のコードです:今
product_id = fields.Many2one(
comodel_name='product.product',
)
@api.v8
@api.onchange('product_id')
def onchange_product_id(self):
_logger.info('*' * 80)
self.ensure_one()
result = super(StockMove, self).onchange_product_id(
self.product_id, self.location_id, self.location_dest_id,
self.picking_id.partner_id)
return result
、問題:私はこのエラーを取得するので、私も、ログメッセージが表示されない:
TypeError: 'NoneType' object is not callable
私はデコレータを変更した場合@api .v8と代わりに@ api.v7を書くと、onchangeメソッドの定義でさらに引数を要求するエラーが表示されます。
私はまた、いくつかのパラメータとのonchangeメソッドを呼び出すことを避けるために、XMLビューでproduct_id
フィールドを交換しようとしましたが、結果は同じだった:
<field name="product_id" position="replace">
<field name="product_id"/>
</field>
方法の古いXMLコールがこれです1つ:
<field name="product_id" on_change="onchange_product_id(product_id,location_id,location_dest_id, parent.partner_id)"/>
誰でも助けてください。私はSOに関連するいくつかの質問を見つけましたが、このケースでは何の反応も私を助けませんでした。
注:私はSuper
を避け、古いonchangeメソッドのすべてのコードを新しいAPIに変換したくありません。これを管理するには、より良い方法でなければなりません。ではない?
@czoelinerは正しいですが、これはほぼ同じですhttp://stackoverflow.com/questions/39366140/inherited-function-odoo-python/39368724#39368724 – danidee
私はそれが重複しているとは思わないここでの焦点は新しいapiと古いapiの利用におけるonchangeメカニズムです。 – CZoellner