您的位置:首页 > 数据库

openerp的非数据库表对象

2013-05-06 21:17 239 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: