1.one裝飾器詳解
odoo新API中定義方式:
date=fields.Date(string="date",compute="_get_date")
@api.one
def _get_date(self):
self.date=fields.Date.today()
等同於舊API的function 類型的簡化版,但是需要特別注意到是one裝飾類無返回值。
2. multi裝飾類詳解
odoo新API中定義方式:
1.一般將multi裝飾類用於tree試圖模式的報表中,如下圖實例:
@api.multi
def action_done(self):
return {
'name': _(u'科目'),
'view_type': 'form',
"view_mode": 'tree,form',
'res_model': 'account.account',
'type': 'ir.actions.act_window',
'domain': [('id', 'in', return_list)],
'views': [(tree_id, 'tree'), (form_id, 'form')],
'view_id': [tree_id],
}
2.multi使用可以參考one裝飾類,不過multi類有返回值。
3.model裝飾類,該裝飾類一般用於定義定時任務的方法中
@api.model
def action_done(self):
.......
.......
類似於舊API:
def action_done(self,cr,uid,context=None):
pass
通過實例,可以看出model裝飾類,是沒有ids傳入的,但是他可以有返回值。
總結:
1.其實通過上面的實例不難看出,model與multi可以有返回值,而one是沒有返回值的,如果用one裝飾器,即使寫了return,也是沒有作用的,雖然不會報錯,但是如果不知道原因的瞎折騰也是比較折磨人的
2.還有一點區別的是multi與one裝飾類是有ids傳入的,而model沒有ids傳入。