您的位置:首页 > 运维架构

openerp开发ORM对象基本信息

2013-12-04 12:47 369 查看
openerp的ORM映射继承于

from openerp.osv import osv
class Demo(osv.osv) # osv.Model 同 osv
pass


ORM 内置属性

_name (必须 继承非必须) : 表名 .换成_
Default:None

_columns (必须) :数据库字段
Example:
_columns = {
'sex': fields.boolean('Sex?'),
}

_table : 默认表名 覆盖_name

_description : 表描述
Example:
'this is description'

_defaults : 字段默认值
Example:
'manuf_warranty': lambda *a: False,

_order : 排序
Default:'id'

_rec_name : name_get 返回的字段值
Default:'name'。注意:默认情况下name_get方法简单地返回该字段的内容。

_auto : 是否创建表 默认True 数据库视图需要False

_constraints : 插入更新时的检查条件 检索是否符合验证
Example:
def check_date( self, cr, uid, ids ):
pass
_constraints = [
(check_date, u'结束日期必须大于起始日期', ['startdate', 'enddate'] ),
]

_sql_constraints : 数据库约束条件
Example:
_sql_constraints = [
('uniq_name', 'unique(name)', u'名称必须唯一!'),
]

_inherit :
Format:'object.name'
For example:'res.partner'
_name不填时 在原表上增加字段 用来扩展原表

_inherits : 继承对象方法 数据库上通过外键方式实现
Example:
{ 'res.partner' : 'partner_id' }


内置方法

create: 创建记录
Example:
def create(self, cr, uid, vals, context=None):
pass
obj = self.pool.get('openacademy.instructor')
id = obj.create(cr,uid, {'name':'Jake', 'email': 'jake@sina.com'})
write: 更新记录
unlink: 删除记录
read: 读取记录中的字段
copy : 复制记录
search: 搜索记录
browse: 通过搜索标准搜索记录
name_get: 仅返回名称标识的记录
name_search: 基于名称在相关的领域搜索
init : _auto = False 的情况,通常重载该方法创建数据库视图。
_auto_init : 通常重载该方法创建数据库索引或 SQL 对象


字段

1.简单类型

boolean:
fields.boolean('Field Name' [, Optional Parameters]),
integer:
fields.integer('Field Name' [, Optional Parameters]),
float:
fields.float('Field Name' [, Optional Parameters]),
char:
fields.char('City Name', size=30, required=True),
text:
fields.text('Field Name' [, Optional Parameters]),
date:
fields.date('Field Name' [, Optional Parameters]),
datetime:
fields.datetime('Field Name' [, Optional Parameters]),
binary:
fields.binary('Field Name' [, Optional Parameters]),# 存储二进制
selection:
Example 1:
fields.selection((('n','Unconfirmed'), ('c','Confirmed')), 'Field Name' [, Optional Parameters]),
Example 2:
def _get_selection(self, cursor, user_id, context=None):
return (('choice1', 'This is the choice 1'),
('choice2', 'This is the choice 2'))
_columns = {
'sel' : fields.selection(_get_selection, 'What do you want ?')
}
Example 3:
'my_field': fields.many2one(
'mymodule.relation.model',
'Title',
selection=_sel_func),
def _sel_func(self, cr, uid, context=None):
obj = self.pool.get('mymodule.relation.model')
ids = obj.search(cr, uid, [])
res = obj.read(cr, uid, ids, ['name', 'id'], context)
res = [(r['id'], r['name']) for r in res]
return res


2.关系类型

many2one 是在当前表 记录引用表的外键关系
例如:'partner_id': fields.many2one('res.partner') 当前表存储res.partner的id
Example:
fields.many2one('other.object.name','Field Name', optional parameters)

one2many 和many2one相反 两个表都指定是为了建立双向关系
Example:
fields.one2many('other.object.name','Field relation id', 'Fieldname', optional parameter)
one2one
Example:
fields.one2one('other.object.name', 'Field Name')
many2many 两个表都指定是为了建立双向关系
Example:
fields.many2many('other.object.name','relation object', 'actual.object.id', 'other.object.id', 'Field Name')
related:
引用关系


3.功能字段

function:
def _get_average_value( self, cr, uid, ids, name, args, context=None):
pass

_columns = {
'avg': fields.function (
_get_average_value,
fcnt_inv=_something_write,
fcnt_search=_something_search,
method=True,
string=“Fields”,
type=“float”,
store=True )
}

fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type="float",
fnct_search=None, obj=None, method=False, store=False, multi=False)
fnct :预先定义的函数,返回本字段值。
fnct_inv :预定义的函数,保存返回值到数据库。
type :函数返回的本字段类型,可以是function以外的任何字段类型。 fnct_search :定义本字段的搜索行为。
method :True表示本字段函数来自于对象的方法,否则,来自于全局函数。 store :是否保存本字段到数据库,默认值是False。
multi :组名,multi 组名相同的字段值会一次性计算。

Store:当某些其他对象上的字段被修改时,这个字段 将重新计算
store = {
'object_name': (
function_name,
['field_name1', 'field_name2'],
priority
)
}

property:# 参考product/partner.py
fields.property
fields.property 类继承自 fields.function,并重载覆盖了读和写方法。这个字 段的类型是 many2one,所以在表单里,一个属性与一个 many2one 函数表现的一样。


字段参数

string:
字段的名称,显示在标签或列标题。注意:使用unicode
change_default:
无论用户是否可以在定义依赖于这个字段的字段的默认值。 这些默认值需要在 ir.values 表里定义。
help:
帮助描述信息
ondelete:
如何处理删除相关的记录 值为
'restrict':约束
'no action':无操作
'cascade':级联删除
'set null':设置空值
'set default':设置默认值
priority:未知
readonly:
是否只读
Default:False
required:
是否必填
Default:False
size:
大小
states:
让您覆盖这个对象特定状态的其他参数。接受一个表示状态 名的字典键,和一个值的名称/值元组列表作为值。例如: states={'posted':[('readonly',True)]}
translate:
是否翻译
Default:False
context:
定义一个在视图的上下文中可视内容或 on-change 函数。用于寻 找子表的 one2many 关系时?
domain:
过滤
Example: domain=[('field','=',value)])
invisible:
表单中隐藏字段值,例如 密码 字段
on_change:
视图中的 on_change 属性默认值。这在字段值客户端中变化时, 将启动服务器上的定义的函数,当在客户端领域的变化。 example,on_change="onchange_shop_id(shop_id)".。
relation:
当一个字段是是另一个表的引用 id 时。这是对应表的名称。通常 被 related 类型和 function 字段类型使用。
select:
在视图中选择属性的默认值。 1 表示基本搜索,2 表示高级搜索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: