Odoo 二次開發教程(五)-新API的介紹與應用


【關於odoo新API的介紹,Internet上資料很少,或者不夠完整詳實,這會對初學者造成很大的困惑,本篇的目的就是希望能幫助新手了解新API的大概】

odoo 新api的實現是借助於python裝飾器,關於python裝飾器的知識,請自行參考python相關手冊。

新API的裝飾器主要有以下幾種:

model,multi,one

constrains,depends,onchange,returns

還有一些像

cr,cr_context,cr_uid,cr_uid_context,cr_uid_id,cr_uid_id_contet,cr_uid_ids,cr_uid_ids_context

這些主要用於一些特定的方法。

一、one

one的用法主要用於self為單一集合的情況,與之相對應的是multi。被one裝飾的方法會返回一個list(某些誤人子弟的教程說one不返回值的,實際是返回了[None]),對於v7版本中類似於 def funct(self,cr,uid,ids,context)的方法可以用api.one裝飾器改用v8寫法。

例子:

 

二、multi

與one相對應,one要求self是單一記錄,而multi則要求self是多個記錄的合集。

三、model

model要求self是一個記錄集,env中並不包含ids參數,即適用於v7中類似於 def funct(self,cr,uid,args,context)的方法。 

 

四、contrains

已經在上篇文章中介紹過,略過不講。

五、depends

depends 主要用於compute方法,v8當中已經取消了function字段,對於任何fields都可以通過添加compute屬性動態賦值。depends就是用來標該方法依賴於哪些字段的裝飾。

例如我們讓學員你的年齡等於學員的編號+1(非常扯淡的邏輯,只做演示):

事實上,不一定非要使用depends裝飾,去掉depends裝飾后,以上的代碼仍然work,只不過運行的時機有了改變,這是為什么呢?請各位同學看官自行體會。

插曲:我們知道7.0中function字段是默認不存儲的,需要使用store參數進行存儲。v8當中所有帶有compute參數的字段默認都不會存儲,store參數也變成了boolean類型,不再提供store的觸發函數。這里使用depends的字段就相當於v7當中的trigger,當依賴的字段發生改變時,會觸發這里的函數對數據庫進行更新。但如果depends依賴的字段也沒有存儲,那么依舊不會觸發。

對於存儲的目的是用來搜索的童鞋來說,我們提供另外一種實現方式,將在后續的文章中提到,敬請期待。

六、onchange

onchange的使用方法非常簡單,就是當字段發生改變時,觸發綁定的函數。

七、returns

returns的用法主要是用來指定返回值的格式,它接受三個參數,第一個為返回值的model,第二個為向下兼容的method,第三個為向上兼容的method

第一個參數如果是對象本身,以'self',如果是其他對象,則寫其他對象名如:@api.returns('ir.ui.view')

例子:

注意看第二個例子,如果調用該方法的是一個v7版本的方法,返回值將進行向下兼容的轉化,即通過第二個參數的lamda表達式返回該記錄的id。

總結:

本文只對常見的幾種API進行了詳細的介紹,更多內容請關注本博客(http://www.cnblogs.com/kfx2007/)的其他文章。

 


免責聲明!

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



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