openerp的非數據庫表對象

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()	


player

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()	



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章