在 Odoo v8 中使用了许多 API 装饰器。@api.depends
但我不明白和之间的主要区别@api.onchange
。
谁能帮我解决这个问题?
谢谢你。
@api.depends
这个装饰器专门用于 odoo 中的“fields.function”。对于“field.function”,您可以计算该值并将其存储在一个字段中,其中计算可能取决于同一表或其他表的某些其他字段,在这种情况下您可以使用 ' @api.depends' 在某个表的字段上保持“监视”。
因此,如果装饰器中的任何字段“被 ORM 更改或在表单中更改”,这将触发对装饰函数的调用。
假设有一个带有字段“x,y & z”的表'A'和带有字段“p”的表'B',其中'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 的链接。
@api.onchange工作在这些记录上的虚拟记录分配不写入数据库,只是用来知道将哪个值发送回客户端。
可以使用 compute 参数计算字段(而不是从数据库中读取),它必须将计算值分配给字段,它使用来自同一模型或其他模型的其他字段的值(不像 @api.onchange 仅工作同一个视图中的字段),它应该使用api.depends( ) 指定字段。
了解更多信息。请查看我们的博客: https ://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/
@api.depends
如果指定的字段发生任何更改,将调用使用此装饰器定义的函数。此外,对字段的更改可以来自 ORM 或表单的更改。此外,如果计算函数值依赖于另一个字段,则必须使用depends 指定它。
@api.onchange
当字段值发生变化时,将调用此装饰器的函数。此外,它仅支持单个字段名称;相反,将不考虑诸如 parent_id.field_name 之类的虚线名称。此外,在包含表单值的伪记录上调用 onchange 方法。以下是相同的示例:
参考以更好地理解示例:https ://www.cybrosys.com/blog/method-decorators-odoo-13