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