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