当前位置:网站首页>DTcloud 装饰器
DTcloud 装饰器
2022-08-05 08:28:00 【中亿丰数字科技集团有限公司】
什么是装饰器?
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。
DTCloud自带的api装饰器主要有:depends,onchange,constrains,one,returns,multi,model,noguess八个装饰器
@api.depends:
这个装饰器主要运用在odoo的字段相关的函数中。在函数中,对该字段值进行处理时,如果计算值依赖于其他相关字段,不论是与该字段隶属同一张表的还是其他表的字段,都会触发所编写的字段函数。
正因为此,可以利用@api.depends 装饰来侦测与字段相关的其他表的字段。如果decorator中依赖的任何字段“被ORM更改或在表单中更改”,都将触发对decorated函数的调用。
简单的说:就是有针对性的调用函数。

@api.onchange
这个装饰器触发decorated函数的时机是:定义的指定字段如果在form窗体出现了变化,就会触发执行。这里要注意的是,这些字段是隶属于同一个模型或同一界面。
综上,虽然 @api.depends 与@api.onchange有诸多相似的地方,但一个重要区别就是 onchange 的侦测字段范围需要在同一个模型或界面上;而depends 可以侦测关联的模型的字段(可以跨不同表)。
@api.constrains
constrains修饰的方法,并在记录集上调用。即写一个函数,去条件判断。如果不满足约束条件,会弹框报警告。


@api.one
这个装饰器自动遍历记录集的记录,self被重新定义为当前记录:
注意:返回值被放进一个列表里,这种做法并不是总被网页客户端支持,例如在按钮动作方法里。在那种情况下,你应该用 @api.multi 来装饰你的方法,并且可能需要在方法定义里调用 self.ensure_one() 。
@api.returns
这个装饰器保证返回值的一致性。 它基于原始返回值返回指定模型的一个记录集:
如果一个旧API方法调用新API方法,它会自动转换为一个id列表。所有装饰器都继承自这个装饰器,以升级或降级返回值。
@api.multi
self为当前记录集,无迭代。 以下是缺省做法:multi则是指self是多个记录的合集。因此,常使用for或self.ensure_one()来遍历self,否则会出现最大递归错误。multi通常用于:在tree视图中点选多条记录,然后执行某个方法,那么那个方法必须用@api.multi修饰,而参数中的self则代表选中的的多条记录。如果仅仅是在form视图下操作,那么self中通常只有当前正在操作的记录。
@api.model
这个装饰器会把旧API对它装饰的方法的调用转换到新API参数。 它让我们可以优雅的迁移旧代码:
@api.noguess
这个装饰器阻止新API装饰器去改变一个方法的输出。
边栏推荐
- 行走社会100绝招
- [Repost] Marry a man must marry a man whose salary is at least 3571.4 yuan higher than yours
- Basic introduction of stack and queue and C language implementation of functions such as creation, destruction, entry and exit, counting the number of elements, viewing elements, etc., as well as stac
- 高效使用数码相机的诀窍
- love is a sad song
- Chapter 12 贝叶斯网络
- Insights in programming
- 路由----router
- Ethernet Principle
- Qt编写自定义控件:文字聚光灯效果之一
猜你喜欢

Chapter 12 Bayesian Networks

SVG星球大战样式Toggle切换开关按钮

uniapp时间组件封装年-月-日-时-分-秒

MySQL database error The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)

DataFrame insert row and column at specified position

Why is pnpm hitting npm and yarn dimensionality reduction?

嵌入式系统:基本定时器

egg框架中解决跨域的三种方案

【结构体内功修炼】枚举和联合的奥秘(三)

MySQL 数据库 报错 The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)
随机推荐
Moonbeam团队发布针对整数截断漏洞的紧急安全修复
Pagoda measurement - building small and medium-sized homestay hotel management source code
树状数组模版+例题
行走社会100绝招
七夕看什么电影好?爬取电影评分并存入csv文件
国际原子能机构总干事称乌克兰扎波罗热核电站安全形势堪忧
SQL语句查询字段内重复内容,并按重复次数加序号
RedisTemplate: 报错template not initialized; call afterPropertiesSet() before using it
Luogu P1966: [NOIP2013 提高组] 火柴排队 [树状数组+逆序对]
Luogu: P2574 XOR的艺术 [线段树]
让程序员崩溃的N个瞬间(非程序员误入)
Ethernet Principle
手机上流行的各类谜语
DPU — 功能特性 — 安全系统的硬件卸载
浅谈自动采集程序及入库
8.4模拟赛总结
Green Apple Forum reopens
Iptables implementation under the network limited (NTP) synchronization time custom port
【 a daily topic 】 1403. The increasing order of the sequence, boy
漂亮MM和普通MM的区别