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': '[email protected]'}) 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 表示高级搜索。