odoo API裝飾器one、model、multi的區別


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傳入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM