2015-02-02 1 views

ответ

27

@ api.depends

Этот декоратор специально используется для "fields.function" в odoo. Для «field.function» вы можете вычислить значение и сохранить его в поле, где возможно, что расчет зависит от некоторых других полей одной таблицы или другой таблицы, @ api.depends ', чтобы «смотреть» на поле какой-то таблицы.

Таким образом, это вызовет вызов декорированной функции, если любое из полей декоратора 'изменено ORM или изменено в форме'.

Допустим, есть таблица «A» с полями «х, у & г» и таблица «B» с полями «р», где «р» является field.function в зависимости от поля «х» из таблицы «A», поэтому, если какое-либо изменение сделано в поле «x», оно вызовет украшенную функцию для вычисления поля «p» в таблице «B».

Убедитесь, что таблица «A» и «B» связана каким-либо образом.

@ api.onchange

Этот декоратор вызовет вызов декорированной функции, если какой-либо из полей, указанных в декоратора изменяется в форме. Здесь область ограничена одним и тем же экраном/моделью.

Скажем, у нас есть поля «DOB» и «Age», поэтому мы можем иметь декоратор @ api.onchange для «DOB», где, как только вы измените значение «DOB», вы можете вычислить поле «возраст».

Вы можете разместить сходства в @ api.depends и @ api.onchange, но некоторые отличия заключаются в том, что область действия onchange ограничена одним и тем же экраном/моделью, а @ api.depends также работает с другим связанным экраном/моделью.

Для получения дополнительной информации Here - это ссылка, которая описывает все API Odoo v8.

+0

Спасибо [email protected] Patadia за ваше объяснение. –

+0

хорошее объяснение с примером. Спасибо, что поделился. –

3

@ api.onchange Работы по присвоению виртуальных записей на этих записях не записываются в базу данных, а просто используются для определения того, какое значение отправить обратно клиенту.

Поля могут быть вычислены (вместо чтения из базы данных) с использованием параметра вычисления, он должен присвоить вычисленное значение полю, он использует значения других полей из той же модели или модели других (в отличие от @api. onchange, которые работают только с полями в одном представлении), он должен указывать поля, используя api.depends ().

Для получения дополнительной информации. Пожалуйста, просмотрите наш блог: https://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/