---------
更新時間
18:06 2016-09-18 星期日
-------
*前言我用的是odoo8,但裡面有相當多的api是以前版本,這時若我們自己開發的
外掛程式採用新版本api,裡面又要呼叫舊版本api.如何操作
個人建議自己擴充套件功能盡量採用新版本api
* 版本api對比
from openerp.osv import fields, osv
class mymodel(osv.osv):
pass...
-------------
class mymodel(osv.model):
pass...
-------------------
新版from openerp import api, fields, models
class mymodel(models.model):
pass...
模型則定義的api版本,跟在後面的字段定義和方法定義
也就要相應的寫法,這裡不要混寫了
* 新舊版方法
def compute(self, cr, uid, from_currency_id, to_currency_id, from_amount,
round=true, context=none):
pass...
---------------
新版def onchange_currency_custom(self):
pass...
很明顯看到新版少了self,cr,uid context
* 新舊版呼叫
這個主要區分在獲取模型的方法
舊版:self.pool['模型名'] 或 self.pool.get('模型名')
新版:self.env['模型名'] 或 self.env.get('模型名')
舉一例:
舊版currency_obj = self.pool['res.currency']
v = currency_obj.compute(self.env.cr, self.env.uid, currency_id, acc.company_id.currency_id.id, amount, context=context)
------
新版account_obj = self.env['account.account']
acc = account_obj.browse(account_id)
------
只有你採用舊版獲取模型方法,才可以呼叫舊版模型中定義的方法
若定義方法用了@api.v7 和@api.v8定義相容方法,這時呼叫時就可隨便一些
也是因為官方有太多老版,才在這裡講解,否則有些同仁一直會為引數不匹配煩惱。
* 新api呼叫舊api橋梁
>>> # method in the old api style
>>> def old_method(self, cr, uid, ids, context=none):
... print ids
>>> # method in the new api style
>>> def new_method(self):
... # system automatically infers how to call the old-style
... # method from the new-style method
... self.old_method()
>>> env[model].browse([1, 2, 3, 4]).new_method()
[1, 2, 3, 4]
* @api.model
@api.model
def some_method(self, a_value):
pass
# can be called as
old_style_model.some_method(cr, uid, a_value, context=context)
# 沒用用ids
* @api.multi
@api.multi
def some_method(self, a_value):
pass
# can be called as
old_style_model.some_method(cr, uid, [id1, id2], a_value, context=context)
#和@api.model 就是相差,帶了ids列表,但可以看到這是乙個可選項
* @api.returns('self')
假定返回值為記錄集
>>> @api.multi
... @api.returns('self')
... def some_method(self):
... return self
>>> new_style_model = env['a.model'].browse(1, 2, 3)
>>> new_style_model.some_method()
a.model(1, 2, 3)
>>> old_style_model = pool['a.model']
>>> old_style_model.some_method(cr, uid, [1, 2, 3], context=context)
[1, 2, 3]
CSS3彈性盒模型新版和老版寫法差異
1 在使用彈性盒模型的時候父元素必須要加display box 或 display inline box 新版彈性盒模型 flex display flex 老版彈性盒模型 box display webkit box 2 box orient 定義盒模型的主軸方向 新版 flex flex dir...
CSS3彈性盒模型新版和老版寫法差異
1 在使用彈性盒模型的時候父元素必須要加display box 或 display inline box 新版彈性盒模型 flex display flex 老版彈性盒模型 box display webkit box 2 box orient 定義盒模型的主軸方向 新版 flex flex dir...
PHP實現人人OAuth登入和API呼叫
人人開放平台給出的php sdk,個人感覺寫的不怎麼樣,而且在我的電腦上執行不出來,總是113錯誤,查文件竟然還沒有這個錯誤碼,於是只好自己按照官方給出的文件,用php自己實現了一下。如下文,沒有作封裝,只是走了一下流程。如果是僅僅用於人人連線這樣的登入驗證和簡單的api呼叫,也不是很有必要封裝。作...