web-dev-qa-db-fra.com

Quelle est la principale différence entre @ api.onchange et @ api.depends dans Odoo (openerp)?

Dans Odoo v8, de nombreux décorateurs API sont utilisés. Mais je ne comprends pas la principale différence entre @ api.depends et @ api.onchange.

Quelqu'un peut-il m'aider?

Merci.

25
bud-e

@ api.depends

Ce décorateur est spécifiquement utilisé pour "fields.function" dans odoo. Pour une "fonction de champ", vous pouvez calculer la valeur et la stocker dans un champ, où il est possible que le calcul dépende d'un ou plusieurs autres champs de la même table ou d'une autre table, dans ce cas, vous pouvez utiliser " @ api.depends 'pour garder une' surveillance 'sur un champ d'une table.

Ainsi, cela déclenchera l'appel à la fonction décorée si l'un des champs du décorateur est 'modifié par ORM ou modifié sous la forme' .

Disons qu'il existe une table 'A' avec les champs "x, y & z" et la table 'B' avec les champs "p", où 'p' est une fonction de champ en fonction de la champ 'x' du tableau 'A', donc si une des modifications est effectuée dans le champ 'x', cela déclenchera la fonction décorée pour calculer le champ 'p' dans le tableau 'B'.

Assurez-vous que les tables "A" et "B" sont liées d'une manière ou d'une autre.

@ api.onchange

Ce décorateur déclenchera l'appel à la fonction décorée si l'un des champs spécifiés dans le décorateur est modifié dans le formulaire. Ici, la portée est limitée au même écran/modèle.

Disons que sur le formulaire, nous avons les champs "DOB" et "Age", donc nous pouvons avoir @ api.onchange décorator pour "DOB", où dès que vous modifiez la valeur de "DOB", vous pouvez calculer le champ "age" .

Vous pouvez identifier des similitudes dans @ api.depends et @ api.onchange, mais les quelques différences sont que la portée de onchange est limitée au même écran/modèle tandis que @ api.depends fonctionne également avec un autre écran/modèle associé.

Pour plus d'informations, Ici est le lien qui décrit toutes les API d'Odoo v8.

44
Hardik Patadia

@ api.onchange fonctionne dans l'attribution des enregistrements virtuels sur ces enregistrements n'est pas écrit dans la base de données, juste utilisé pour savoir quelle valeur renvoyer au client.

Les champs peuvent être calculés (au lieu d'être lus dans la base de données) à l'aide du paramètre de calcul, il doit affecter la valeur calculée au champ, il utilise les valeurs d'autres champs du même modèle ou d'autres modèles (contrairement à @ api.onchange qui ne fonctionne que avec les champs dans la même vue), il doit spécifier les champs en utilisant api.depends ().

Pour plus d'informations. Veuillez consulter notre blog: https://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/

5
Odoo For Beginners