boolean: 布尔型(true, false)integer: 整数。
float: 浮点型,如 'rate' : fields.float('Relative Change rate',digits=(12,6)), digits定义整数部分和小数部分的位数。char: 字符型,size属性定义字符串长度。
text: 文本型,没有长度限制。
date: 日期型
datetime: 日期时间型
binary: 二进制型
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表示是全局函数,不是对象的方法。如果method=True,obj指定method的对象。· fcnt 是函数或方法,用于计算字段值。如果method = true, 表示fcnt是对象的方法,其格式如下:def fnct(self, cr, uid, ids, field_name, args, context),否则,其格式如下:def fnct(cr, table, ids, field_name, args, context)。ids是系统传进来的当前存取的record id。field_name是本字段名,当一个函数用于多个函数字段类型时,本参数可区分字段。args是'arg=None'传进来的参数。· fcnt_inv 是用于写本字段的函数或方法。如果method = true, 其格式是:def fcnt_inv(self, cr, uid, ids, field_name, field_value, args, context),否则格式为:def fcnt_inv(cr, table, ids, field_name, field_value, args, context)· fcnt_search 定义该字段的搜索行为。如果method = true, 其格式为:def fcnt_search(self, cr, uid, obj, field_name, args),否则格式为:def fcnt_search(cr, uid, obj, field_name, args)· store 表示是否希望在数据库中存储本字段值,缺省值为False。不过store还有一个增强形式,格式为 store={'object_name':(function_name,['field_name1','field_name2'],priority)} ,其含义是,如果对象'object_name'的字段['field_name1','field_name2']发生任何改变,系统将调用函数function_name,函数的返回结果将作为参数(arg)传送给本字段的主函数,即fnct。
selection: 下拉框字段。定义一个下拉框,允许用户选择值。如:'state': fields.selection((('n','Unconfirmed'),('c','Confirmed')),'State', required=True),这表示state字段有两个选项('n','Unconfirmed')和('c','Confirmed')。one2one: 一对一关系,格式为:fields.one2one(关联对象Name, 字段显示名, ... )。在V5.0以后的版本中不建议使用,而是用many2one替代。
many2one: 多对一关系,格式为:fields.many2one(关联对象Name, 字段显示名, ... )。可选参数有:ondelete,可选值为"cascade"和"null",缺省值为"null",表示one端的record被删除后,many端的record是否级联删除。one2many: 一对多关系,格式为:fields.one2many(关联对象Name, 关联字段, 字段显示名, ... ),例:'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts')。
many2many: 多对多关系。例如:
reference: 引用型,格式为:fields.reference(字段名, selection, size, ... )。其中selection是: 1)返回tuple列表的函数,或者 2)表征该字段引用哪个对象(or model)的tuples列表。reference字段在数据库表中的存储形式是(对象名,ID),如(product.product,3)表示引用 对象product.product(数据表product_product)中id=3的数据。reference的例子:
related: 关联字段,表示本字段引用关联表中的某字段。格式为:fields.related(关系字段,引用字段,type, relation, string, ...),关系字段是本对象的某字段(通常是one2many or many2many),引用字段是通过关系字段关联的数据表的字段,type是引用字段的类型,如果type是many2one or many2many, relation指明关联表。例子如下:
property: 属性字段,下面以具体例子解说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")这个例子表示,本对象通过字段'property_product_pricelist'多对一(type='many2one')关联到对象 product.pricelist(relation='product.pricelist')。和many2one字段类型不同的 是,many2one字段会在本对象中创建数据表字段'property_product_pricelist',property字段类型不会创建数据 表字段'property_product_pricelist'。property字段类型会从数据表ir.property中查找 name='property_product_pricelist'(即字段定义中的'product.pricelist'加上前缀 property,并将"."替换成"_"作为name)且company_id和本对象相同的记录,从该记录的value字段(value字段类型为 reference)查得关联记录,如(product.pricelist,1),表示本对象的resource多对一关联到对象 product.pricelist的id=1的记录。也就是说,property字段类型通过ir.property间接多对一关联到别的对象。
字段定义的参数
required: 本字段是否必须的,缺省值:False。
states: 定义特定state才生效的属性,格式为:{'name_of_the_state': list_of_attributes},其中list_of_attributes是形如[('name_of_attribute', value), ...]的tuples列表。例子(参见account.transfer):
string: 字段显示名,任意字符串。
translate: 本字段值(不是字段的显示名)是否可翻译,缺省值:False。
size: 字段长度。
priority:domain: 域条件,缺省值:[]。在many2many和many2one类型中,字段值是关联表的id,域条件用于过滤关联表的record。例子:'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]"),本例表示,本字段关联到对象('account.account')中的,type不是'view'的record。invisible: 本字段是否可见,即是否在界面上显示本字段,缺省值True。
selection: 只用于reference字段类型,参见前文reference的说明。
基本方法:create, search, read, browse, write, unlink。
缺省值存取方法:default_get, default_set。def default_get(self, cr, uid, fields, form=None, reference=None)def default_set(self, cr, uid, field, value, for_user=False)
特殊字段操作方法:perm_read, perm_writedef perm_read(self, cr, uid, ids)def perm_write(self, cr, uid, ids, fields)字段(fields)和视图(views)操作方法:fields_get, distinct_field_get, fields_view_getdef fields_get(self, cr, uid, fields = None, context={})def fields_view_get(self, cr, uid, view_id=None, view_type='form',context={})def distinct_field_get(self, cr, uid, field, value, args=[], offset=0,limit=2000)
记录名字存取方法:name_get, name_searchdef name_get(self, cr, uid, ids, context={})def name_search(self, cr, uid, name='', args=[], operator='ilike',context={})
缺省值存取方法:default_get, default_setdef name_get(self, cr, uid, ids, context={})def name_search(self, cr, uid, name=, args=[], operator=’ilike’, context={})create方法:在数据表中插入一条记录(或曰新建一个对象的resource)。格式:def create(self, cr, uid, vals, context={})参数说明:vals: 待新建记录的字段值,是一个字典,形如: {'name_of_the_field':value, ...}context (optional): OpenERP几乎所有的方法都带有参数context,context是一个字典,存放一些上下文值,例如当前用户的信息,包括语言、角色等。 context可以塞入任何值,在action定义中,有一个context属性,在界面定义时,可以在该属性中放入任何值,context的最初值通常 来自该属性值。返回值:新建记录的id。举例:id = pooler.get_pool(cr.dbname).get('res.partner.event').create(cr, uid,{'name': 'Email sent through mass mailing','partner_id': partner.id,'description': 'The Description for Partner Event'})search方法:查询符合条件的记录。格式:def search(self, cr, uid, args, offset=0, limit=2000)参数说明:args: 包含检索条件的tuples列表,格式为: [('name_of_the_field', 'operator', value), ...]。可用的operators有:
来源:苏州远鼎官网