web-dev-qa-db-ja.com

Odoo(openerp)の@ api.onchangeと@ api.dependsの主な違いは何ですか?

Odoo v8では、多くのAPIデコレータが使用されています。しかし、私は@ api.depends@ api.onchangeの主な違いを理解していません。

誰かがこれから私を助けることができますか?

ありがとうございました。

23
bud-e

@ api.depends

このデコレータは、特にodooの「fields.function」に使用されます。 「field.function」の場合、値を計算してフィールドに保存できます。計算は、同じテーブルまたは他のテーブルの他のフィールドに依存する可能性があります。その場合、「 @ api.depends」を使用して、テーブルのフィールドを「監視」します。

そのため、デコレータのフィールドのいずれかが「ORMによって変更されるか、フォームで変更される」場合、これは装飾された関数の呼び出しをトリガーします。

「x、y&z」フィールドを持つテーブル「A」と「p」フィールドを持つテーブル「B」があるとします。「p」はフィールド関数です。テーブル 'A'のフィールド 'x'であるため、フィールド 'x'で変更が行われると、テーブル 'B'のフィールド 'p'を計算するための装飾された関数がトリガーされます。

テーブル「A」と「B」が何らかの方法で関連していることを確認してください。

@ api.onchange

このデコレータは、デコレータで指定されたフィールドのいずれかがフォームで変更されると、装飾された関数の呼び出しをトリガーします。 ここでは、スコープは同じ画面/モデルに制限されています。

フォームに「DOB」フィールドと「年齢」フィールドがあるとします。したがって、「DOB」の@ api.onchangeデコレータを使用できます。「DOB」の値を変更するとすぐに、「年齢」フィールドを計算できます。

@ api.dependsと@ api.onchangeに類似点を入力することもできますが、いくつかの違いは、onchangeのスコープが同じ画面/モデルに制限されている一方で、@ api.dependsは他の関連する画面/モデルでも機能することです。

詳細については、 ここ はOdoo v8のすべてのAPIを説明するリンクです。

40
Hardik Patadia

@ api.onchangeは、仮想レコードで機能します。これらのレコードの割り当てはデータベースに書き込まれず、クライアントに送り返す値を知るためだけに使用されます。

Computeパラメーターを使用して、(データベースから読み取る代わりに)フィールドを計算できます。フィールドに計算値を割り当てる必要があり、同じモデルまたは他のモデルのほかのフィールドの値を使用する必要があります(@ api.onchangeのみが動作します)同じビューのフィールドで)、api.depends()を使用してフィールドを指定する必要があります。

詳細については。ブログをご覧ください: https://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/

5