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

@api.onchange和@api.depends在Odoo(openerp)中的主要区别是什么?,openerp,odoo,openerp-8,Openerp,Odoo,Openerp 8,在OdooV8中,使用了许多API装饰器。 但是我不明白@api.depends和@api.onchange之间的主要区别 有人能帮我解决这个问题吗 谢谢。@api.dependence 此装饰器专门用于odoo中的“fields.function”。对于“field.function”,您可以计算值并将其存储在字段中,其中计算可能依赖于同一表格或其他表格的其他字段,在这种情况下,您可以使用“@api.depends”对某些表格的字段进行“监视” 因此,如果decorator中的任何字段被ORM

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

有人能帮我解决这个问题吗


谢谢。

@api.dependence

此装饰器专门用于odoo中的“fields.function”。对于“field.function”,您可以计算值并将其存储在字段中,其中计算可能依赖于同一表格或其他表格的其他字段,在这种情况下,您可以使用“@api.depends”对某些表格的字段进行“监视”

因此,如果decorator中的任何字段被ORM更改或以“的形式更改,这将触发对修饰函数的调用

假设有一个表“a”包含字段“x,y&z”,表“B”包含字段“p”,其中“p”是一个字段。函数取决于表“a”中的字段“x”,因此,如果字段“x”中有任何更改,它将触发用于计算表“B”中字段“p”的修饰函数。

确保表“A”和“B”以某种方式相关


@api.onchange

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

假设表单上有“DOB”和“Age”字段,因此我们可以为“DOB”设置@api.onchange decorator,只要您更改“DOB”的值,就可以计算“Age”字段

您可以在@api.depends和@api.onchange中输入相似之处,但一些区别在于onchange的范围仅限于同一屏幕/模型,而@api.depends也适用于其他相关屏幕/模型


有关更多信息,请参阅描述Odoo v8的所有API的链接。

@API。onchange在虚拟记录中起作用。这些记录上的分配不会写入数据库,只是用于知道要发送回客户端的值

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

了解更多信息。请查看我们的博客:

@api.com

如果在指定的字段中发生任何更改,将调用使用此装饰器定义的函数。此外,对字段的更改可以来自ORM或表单中的更改。此外,如果计算函数值依赖于另一个字段,则必须使用depends指定它

@api.onchange

当字段值更改时,将调用此装饰器的函数。此外,它只支持单个字段名;相反,将不考虑虚线名称,如父项\u id.field\u name。此外,在包含表单值的伪记录上调用onchange方法。以下是相同的示例:

参考以更好地理解示例: