字段类型
基础类型:
char, text, boolean, integer, float, date, datetime, binary
关系类型:
one2one, one2many, many2one, many2many
复杂类型:
selection, function, related
详解
基础类型
char:
字符型,常用来存储长度小的文本
text:
文本型,没有长度限制。
boolean:
布尔型(True, False)
integer:
整数,不用多讲
float:
浮点型,如 ‘rate’ : fields.float(‘Relative Change rate’,digits=(12,6)), digits定义整数部分和小数部分的位数。
date:
日期型
datetime:
日期时间型
binary:
二进制型
Html:
与text类似,用于多行文本编辑,不过自带编辑器样式,并且会把内容以html解析。
Selection:
下拉列表,枚举类型。
复杂类型
one2one:
一对一关系,格式为:fields.one2one(关联对象Name, 字段显示名, … )。在V5.0以后的版本中不建议使用,而是用many2one替代
many2one:
多对一关系,格式为:fields.many2one(关联对象Name, 字段显示名, … )。可选参数有:ondelete,可选值为”cascade”和”null”,缺省值为”null”,表示one端的record被删除后,many端的record是否级联删除
例:responsible_id = fields.Many2one(‘res.users’, string=”Responsible”,
ondelete=’set null’, index=True)
one2many:
一对多关系,格式为:fields.one2many(关联对象Name, 关联字段, 字段显示名, … )
例:session_ids = fields.One2many( ‘openacademy.session’, ‘course_id’,
string=”Sessions”)
many2many:
多对多关系
例’category_id’:fields.many2many(‘res.partner.category’,’res_partner_category_rel’,’partner_id’,’category_id’,’Categories’),表示以多对多关系关联到对象res.partner.category,关联表为’res_partner_category_rel’,关联字段为
‘partner_id’和’category_id’。当定义上述字段时,OpenERP会自动创建关联表为
‘res_partner_category_rel’,它含有关联字段’partner_id’和’category_id’。
字段属性
1 store=True
,计算字段要加
2 readonly=True
,设置字段只读
3 index=True
,增加数据库索引,提高搜索查找速度
4 required=True
,设置字段必填
5 size=64
,char类型字段设置字符大小?
6 default=False
,默认值
7 oldname=" "
,原字段名,用于替换字段名
8 related=''
, 关系字段
9 compute = ‘方法名’
,计算方法
10 inverse=‘ ’
,逆计算,可以和cmpute一同使用
11 help = ’ ’
,提示信息
12 ondelete = ’ ’
13 compute_sudo = True
14 domain = [ ]
15 digits=(10,2)
,添加在浮点型后面,控制小数位数(长度为10,数据库:保留两位)
16 translate=True
常用字段属性
String
是要在用户界面中使用的字段的默认标签。除了Selection和Relation字段之外,它是第一个位置参数,因此
大多数情况下它不用做关键字参数。如果未提供,则从字段名称中自动生成。
default
为字段设置默认值。可以是一个特定的值,或者是一个可调用的参数,包括匿名函数或命名功能。
readonly=True
默认情况下,该字段在用户界面中不可编辑。但模型方法中的代码可以写入它,因为这只是用户界面的设置。
required=True
默认情况下在用户界面强制使用该字段。通过在列上添加 NOT NULL 约束在数据库级别强制执行此操作。
index=True
在字段上添加数据库索引,以便以缓慢的写入操作为代价 加快搜索操作。
copy=False
在使用重复记录功能copy()ORM方法时,忽略该字段,默认情况会复制 字段值 ,但默认情况下不复制的对多关系字段除外。
groups
将字段的访问权限和可见性限制为某些组。它期望安全组以逗号分隔的xml
ID列表,例如,states={‘done’:[{readonly’,True)].
请注意,states属性等效于视图中的attrs属性。另外请注意,视图支持状态属性,但它又不同的用途:它接受以逗号分隔的状态列表,以控制元素何时可见。
related
字段=fields.类型(related=“某个字段.类字段”,store=true/false)
related字段可以简记为“带出字段”,由当前模型的某个关联类型字段的某个字段带出值
compute
字段不是一种字段类型,而是指某个字段的值是计算出来的。 一个字段的值,可以通过一个函数来动态计算出来。定义格式如下:
字段名 = fields.类型(compute="函数名", store=True / false) # store定义了该动态改变的字段值是否保存到数据库表中
@api.depends(依赖的字段值) # depend的字段值一旦发生变化,就会触发该函数,从而更新compute字段值。
def 函数(self):
self.字段 = 计算字段值