一、字段类型概述
OpenERP 对象支持多种字段类型,包括基础类型、复杂类型和关系类型。
基础类型
- boolean:布尔型(true, false)
- integer:整数
- float:浮点型,如 'rate' : fields.float('Relative Change rate', digits=(12,6)),digits 定义整数部分和小数部分的位数。
- char:字符型,size 属性定义字符串长度。
- text:文本型,没有长度限制。
- date:日期型
- datetime:日期时间型
- binary:二进制型
复杂类型
- function:函数型,该类型的字段值由函数计算而得,不存储在数据表中。
- related:关联字段,表示本字段引用关联表中的某字段。
- selection:下拉框字段,允许用户选择值。
关系类型
- one2one:一对一关系(在 V5.0 以后的版本中不建议使用,用 many2one 替代)
- many2one:多对一关系
- one2many:一对多关系
- many2many:多对多关系
- reference:引用型
二、字段类型详解
function(函数型)
函数型字段的值由函数计算得出,不存储在数据表中。定义格式如下:
fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='float', fnct_search=None, obj=None, method=False, store=True)
- type:函数返回值的类型。
- method:为 True 表示本字段的函数是对象的一个方法,为 False 表示是全局函数。
- fnct:计算字段值的函数或方法。
- fnct_inv:用于写本字段的函数或方法。
- fnct_search:定义该字段的搜索行为。
- store:是否在数据库中存储本字段值。
selection(下拉框型)
定义一个下拉框字段,允许用户选择值。例如:
'state': fields.selection((('n','Unconfirmed'), ('c','Confirmed')), 'State', required=True)
关系类型字段
one2one(一对一关系)
格式为:`fields.one2one(关联对象Name, 字段显示名, ... )`。在 V5.0 以后的版本中不建议使用,用 many2one 替代。
many2one(多对一关系)
格式为:`fields.many2one(关联对象Name, 字段显示名, ... )`。可选参数 `ondelete` 可选值为 "cascade" 和 "null"。
one2many(一对多关系)
格式为:`fields.one2many(关联对象Name, 关联字段, 字段显示名, ... )`。例如:
'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts')
many2many(多对多关系)
'category_id': fields.many2many('res.partner.category', 'res_partner_category_rel', 'partner_id', 'category_id', 'Categories')
reference(引用型)
格式为:`fields.reference(字段名, selection, size, ... )`。例如:
'ref': fields.reference('Document Ref 2', selection=_links_get, size=128)
related(关联字段)
表示本字段引用关联表中的某字段。例如:
'city': fields.related('address', 'city', type='char', string='City')
property(属性字段)
通过 `ir.property` 间接多对一关联到别的对象。例如:
'property_product_pricelist': fields.property('product.pricelist', type='many2one', relation='product.pricelist', string="Sale Pricelist", method=True, view_load=True, group_name="Pricelists Properties")
三、字段定义参数
字段定义中可用的参数有:
- change_default:别的字段的缺省值是否可依赖于本字段。
- readonly:本字段是否只读。
- required:本字段是否必须。
- states:定义特定 state 才生效的属性。
- string:字段显示名。
- translate:本字段值是否可翻译。
- size:字段长度。
- priority:优先级。
- domain:域条件。
- invisible:本字段是否可见。
- selection:用于 reference 字段类型。
四、对象的预定义方法
每个 OpenERP 对象都有一些预定义方法,这些方法定义在基类 `osv.osv` 中。包括:
- 基本方法:`create`, `search`, `read`, `browse`, `write`, `unlink`
- 缺省值存取方法:`default_get`, `default_set`
- 字段和视图操作方法:`fields_get`, `distinct_field_get`, `fields_view_get`
- 记录名字存取方法:`name_get`, `name_search`
这些方法用于对象的基本操作,如创建、查询、读取、更新和删除记录,以及获取字段和视图信息等。