Подтвердить что ты не робот

В чем основное отличие между @api.onchange и @api.depends в Odoo (openerp)?

В Odoo v8 используется множество декораторов API. Но я не понимаю главного различия между @api.depends и @api.onchange.

Может ли кто-нибудь помочь мне в этом?

Спасибо.

4b9b3361

Ответ 1

@api.depends

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

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

Скажем, есть таблица "A" с полями "x, y и z" и таблицей "B" с полями "p" , где "p" - это полевая функция, зависящая от поля 'x 'из таблицы "A" , поэтому, если какое-либо изменение сделано в поле "x", оно вызовет украшенную функцию для вычисления поля "p" в таблице "B" .

Убедитесь, что таблицы "A" и "B" связаны определенным образом.

@api.onchange

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

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

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

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

Ответ 2

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

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

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