openerp的模型基本都是對應於一張數據庫表。但是也存在對應多張已有表的情況,比如report.可以考慮使用數據庫view來實現。
注意內容如下:
1.模型定義的_auto=False
2.模型裏面所有的字段都必須是readonly=True
3.聲明init(self, cr)函數,用來生成view
4.view的試圖字段必須與_columns中的完全相同
例子如下:
生成一個由account和player聯合的視圖對象accountplayer
account
from osv import fields, osv
class account(osv.osv):
_name='kyle.account'
_discription='賬號測試'
_columns={
'name':fields.char(u'賬號名',size=64,select=True),
}
account()
from osv import fields, osv
class player(osv.osv):
_name='kyle.player'
_discription='賬號測試'
_columns={
'accountid':fields.many2one('kyle.account',u'賬號ID'),
'name':fields.char(u'賬號名',size=64,select=True),
}
player()
accountplayer
from osv import fields, osv
class accountplayer(osv.osv):
_name='kyle.accountplayer'
_discription='賬號角色列表'
_auto=False
_columns={
'accountname':fields.char(u'賬號名',size=64,select=True,readonly=True),
'playername':fields.char(u'角色名',size=64,select=True,readonly=True),
}
def init(self, cr):
"hello world"
cr.execute("create or replace view kyle_accountplayer as select a.name as accountname, p.name as playername from kyle_account as a join kyle_player as p on p.accountid = a.id")
accountplayer()