openerp开发ORM对象基本信息

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' <span style="font-family: Arial, Helvetica, sans-serif;">[, Optional Parameters]),# 存储二进制</span>
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 表示高级搜索。




原文:http://blog.csdn.net/scopop/article/details/17116121



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