Odoo(openerp)中@ api.onchange与@ api.depends的主要区别是什么?

bud*_*d-e 23 openerp openerp-8 odoo

在Odoo v8中,使用了许多API装饰器.但我不明白@ api.depends@ api.onchange之间的主要区别.

任何人都可以帮我解决这个问题吗?

谢谢.

小智 41

@ api.depends

这个装饰器专门用于odoo中的"fields.function".对于"field.function",您可以计算该值并将其存储在一个字段中,在该字段中,计算可能取决于同一个表或某个其他表的某些其他字段,在这种情况下,您可以使用' @ api.depends'在某个表的字段上保持'监视'.

因此,如果装饰器中的任何字段"由ORM更改或在表单中更改",这将触发对装饰函数的调用.

假设有一个表'A'表示字段"x,y&z",表'B'表示字段"p",其中'p'是字段.函数取决于表'A'中的字段'x' ,因此如果在字段'x'中进行任何更改,它将触发用于计算表'B'中的字段'p'的修饰函数.

确保表"A"和"B"以某种方式相关.

@ api.onchange

如果在窗体中更改了装饰器中指定的任何字段,则此装饰器将触发对装饰函数的调用.此范围仅限于同一屏幕/型号.

让我们说在表单上我们有字段"DOB"和"Age",所以我们可以为"DOB"设置@ api.onchange装饰器,只要你改变"DOB"的值,你就可以计算"age"字段.

你可以在@ api.depends和@ api.onchange中找到相似之处,但是有些不同之处在于onchange的范围仅限于同一个屏幕/模型,而@ api.depends也适用于其他相关的屏幕/模型.

欲了解更多信息,下面是描述Odoo V8的所有API的链接.


小智 5

@ api.onchange在虚拟记录分配中起作用,这些记录未写入数据库,仅用于知道将哪个值发送回客户端。

可以使用compute参数来计算字段(而不是从数据库中读取),它必须将计算的值分配给该字段,它使用来自同一模型或其他模型的其他字段的值(不同于@ api.onchange,后者仅适用于(这些字段位于同一视图中),则应使用api.depends()指定字段。

想要查询更多的信息。请查看我们的博客:https : //odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/