Odoo v8では、多くのAPIデコレータが使用されています。しかし、私は@ api.dependsと@ api.onchangeの主な違いを理解していません。
誰かがこれから私を助けることができますか?
ありがとうございました。
@ 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を説明するリンクです。
@ api.onchangeは、仮想レコードで機能します。これらのレコードの割り当てはデータベースに書き込まれず、クライアントに送り返す値を知るためだけに使用されます。
Computeパラメーターを使用して、(データベースから読み取る代わりに)フィールドを計算できます。フィールドに計算値を割り当てる必要があり、同じモデルまたは他のモデルのほかのフィールドの値を使用する必要があります(@ api.onchangeのみが動作します)同じビューのフィールドで)、api.depends()を使用してフィールドを指定する必要があります。
詳細については。ブログをご覧ください: https://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/