您的位置:首页 > 移动开发 > Objective-C

OpenERP Server Developers Documentation之Objects, Fields and Methods

2014-08-16 23:38 691 查看
class tiny_object(osv.osv)
_name = 'tiny.object'
_table = 'tiny_object'
_inherits = {
'tiny.object_a': 'object_a_id',
'tiny.object_b': 'object_b_id',
... ,
'tiny.object_n': 'object_n_id'
}
(...)




Objects, Fields and Methods

OpenERP Objects(OpenERP对象)

所有的ERP的数据文件片是通过“Object”访问的。例如,有一个res.partner 的对象访问partners的数据,一个account.invoice对象访问发票的数据,等等。

请注意是一个对象对应资源的每个类型,而不是一个对象对应一个资源。我们使用一个res.partner对象管理所有的partners,而不是一个res.partner对象对应一个partner。如果我们说到“对象导向的”条目,也可以说成每级有一个对象。

直接的影响是对象的所有成员有一个共同参数:“ids”参数。其指定了方法匹配的资源。准确地说,这个参数包含了一列资源标示符(ids,这个方法必须匹配)。

例如,如果有两个id为1和5的partners,我们想调用res_partner 方法“send_mail”,写法如下:
res_partner.send_email(...,
[1,5],
...)

下面具体讨论对象方法调用的正确语法。

在接下来的章节中,将介绍如何定义一个新的对象。之后介绍几个定义新对象的方法。

对于开发者:

OpenERP“对象”是面向对象编程的类
一个OpenERP “资源” 通常叫做OO编程的对象,即一个类的实例

在OpenERP中开发时,通常有点混乱,因为是用Python开发,并且Python是一个全部对象导向的语言,并有对象和实例。

幸运地是,一个OpenERP的“resource”可以魔术般地转为一个Python对象,使用“browse”类方法(OpenERP的对象方法)

The ORM - Object-relational mapping - Models

ORM,简短地说是对象关系映射,是OpenERP的核心部分。

在OpenERP中,数据模型是通过Python类和对象描述和操作。缩小Python和底层关系型数据库(PostgreSQL支持对象的持久化)的差距是ORM的工作。

OpenERP Object Attributes(OpenERP的对象属性)



Objects Introduction(对象介绍)

为定义一个新对象,必须定义一个新的Python类并稍后实例化。这个类必须继承osv模块的osv类。

Object definition(对象定义)

对象定义的第一行如下:
class name_of_the_object(osv.osv):
_name = 'name.of.the.object'
_columns = { ... }
...
name_of_the_object()


通过在类中使用预定义名字定义一些字段定义一个对象。这两个是必须的(_name和_colums),其它的是可选的。预定义字段如下:

Predefined fields(预定义字段)

_auto

_columns (必选)

对象字段。详情见fields 部分

_constraints(常量)

对象的常量。

_sql_constraints

对象的SQL常量

_defaults

对象字段的一些默认值

_inherit(继承)

当前对象继承的osv.object的名字

_name(必须)
对象名字,默认为none

_order
用于排序搜查和读取方法的字段名字

默认值:id
例子:
_order =
"name"

_order = "date_order desc"

_rec_name
每个资源名存储的字段名。默认值:name。注意,一般地 name_get方法简单地返回这个字段的内容

_sql
对象创建上执行的SQL代码(仅当_auto是true)。意味着创建表后执行代码

_table
SQL表名字。默认值:_name字段值

_auto
将决定根据对象,其对应的PostgreSQL表是否必须自动创建。设置其为False,在从PostgreSQL视图中创建OpenERP对象的情况是很有用的。

_inherits
对象继承的osv对象列表。这个列表必须按照Python列表格式给出({'name_of_the_parent_object': 'name_of_the_field', ...})。

_log_access
决定访问资源是否需要记录。如果需要,在SQL表中将创建四个字段:create_uid, create_date, write_uid, write_date.。那些字段代表了创建这个记录的用户id,记录的创建日期,最后一次修改记录的用户id,和最后一次修改的时间。通过perm_read方法获取。

Object Inhritance- _inherit

介绍
对象可以在一些或者特定的模块中继承。最好通过继承来天机或修改一些字段
其是这样做的:
_inherit = 'object.name'

对象扩展

有两种方式来做这种继承。虽然两种方式作用于数据的新类上,其既有父类的属性和方法还有额外的属性和字段,但是它们引起的结果差距很大。

例子1 创建了一个新的类"custom_material",可能被一个视图或者树形看见或者使用,其将处理“network.material”

这是源于表(other.material),新的子类要操作的表,将从不被前面的"network.material"的视图或者树注意到

例子1 :

class custom_material(osv.osv):
_name = 'network.material'
_inherit = 'network.material'
_columns = {
'manuf_warranty': fields.boolean('Manufacturer warranty?'),
}
_defaults = {
'manuf_warranty': lambda *a: False,
}
custom_material()


注意:
_name = _inherit

在这个例子中,custom_material将给'network.material'对象添加一个新的字段'manuf_warranty。这个类的新的实例通过视图或者树形操作超类表“network material”可见。

inheriency在面向对象设计中通常叫做类继承。儿子继承了父类的字段和行为。

例子 2:
class other_material(osv.osv):
_name = 'other.material'
_inherit = 'network.material'
_columns = {
'manuf_warranty': fields.boolean('Manufacturer warranty?'),
}
_defaults = {
'manuf_warranty': lambda *a: False,
}
other_material()


注意:这里name 不等于继承的
在这个例子中,other_material将持有network.material指定的所有字段,并且它将额外持有一个新的字段“'manuf_warranty'”。所有的那些字段将是表'other.material'的一部分。这个类的新的实例在通过视图或者树形操作超类表“network.material”时将是不可见。

这类继承叫做inheritance by prototyping。因为新创建的类复制了指定父类的所有字段。子类继承了父类的数据和行为。

Inheritance by Delegation --_inherits(委托继承)

语法:
class tiny_object(osv.osv)
_name = 'tiny.object'
_table = 'tiny_object'
_inherits = {
'tiny.object_a': 'object_a_id',
'tiny.object_b': 'object_b_id',
... ,
'tiny.object_n': 'object_n_id'
}
(...)


对象tiny_object从inherits中继承了所有的字段和方法

为了从多个表中继承,会给每个继承的对象向tiny_object表添加一列。这列将存储一个外键(另一张表的id)。object_a_id,object_b_id等是String类型并且定义了列的标题,来自tiny.object_a,tiny.object_b等等的外键保存在这列中。

这个继承机制通常叫做instance inheritance " 或者 " value inheritance 。一个资源(实例)有其合作者的VALUES。

字段介绍


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: