odoo api修饰器介绍与应用
参考文档:https://www.cnblogs.com/kfx2007/p/6093994.html
一、one
one的用法主要用于self为单一集合的情况,被one装饰的方法会返回一个list[None]
例子:
@api.one
def _get_date(self):
self.date=fields.Date.today()
二、multi
multi则要求self是多个记录的合集,env中包含ids参数
例子:
@api.multi
def write(self,vals):
if vals.get('name'):
val['name']=u'test'
return super(test,self).write(vals)
三、model
model要求self是一个记录集,env中并不包含ids参数,因此重构write和unlink等方法,不能使用model修饰器
@api.model
def write(self,vals):
vals={'name':'test',}
return super(test,self).create(vals)
四、contrains
@api.constrains('completion_time')
def _check_completion_time(self):
for i in self:
if datetime.datetime.strptime(i.completion_time, "%Y-%m-%d %H:%M:%S") < datetime.datetime.utcnow():
raise ValidationError('完成时间需大于当前时间')
五、depends
depends 主要用于compute方法,用来标该方法依赖于哪些字段的装饰
@api.depends('completion_time')
def compute_completion_time(self):
for i in self:
if i.completion_time:
if datetime.datetime.strptime(i.completion_time, "%Y-%m-%d %H:%M:%S") > datetime.datetime.utcnow():
i.overdue_status = u'未逾期'
else:
i.overdue_status = u'已逾期'
六、onchange
onchange的使用方法非常简单,就是当字段发生改变时,触发绑定的函数
@api.onchange('responsible_department')
def onchange_responsible_person(self):
return {
'domain': {'responsible_person': [('department_id', '=', self.responsible_department.id)]},
}
七、return
returns的用法主要是用来指定返回值的格式,它接受三个参数,第一个为返回值的model,第二个为向下兼容的method,第三个为向上兼容的method