基本字段类型
Binary:二进制类型,用于保存图片、视频、文件、附件等,在视图层显示为一个文件上传按钮。【Odoo底层对该类型字段的容量作了限制,最多能容纳20M内容】
Char:字符型,size属性定义字符串长度。
Boolean:布尔型,单选框,勾选为True,不勾选为False
Float:浮点型,如 rate = fields.float(digits=(12,6)), digits定义数字总长和小数部分的位数。
Integer:整数类型
Date:短日期,年月日,在view层以日历选择框显示。
Datetime:时间类型,年月日时分秒。
Text:文本型,多用于多行文本框,可以用widget属性为它添加样式。
Html:与text类似,用于多行文本编辑,不过自带编辑器样式,并且会把内容以html解析。
Selection:下拉列表,选择类型。
Monetary:货币类型,用于显示金额。
关联字段类型
One2one:一对一关系,在老版本见过。
Manyone:多对一关系,格式为fields.Many2one(‘模型名’)可选参数有:ondelete, 可选值为"cascade"和"null",缺省值为"null",表示one端的record被删除后,many端的record是否级联删除。
One2many:一对多关系,格式为:fields.One2many(‘模块名’, ‘字段名’)
Many2many:多对多关系,格式为:fields.Many2many(‘模型名’, ’表名‘),多对多比较麻烦,我举个例子:
company_ids = fields.Many2many('res.company','res_company_users_rel', 'user_id', 'cid',
string='Companies', default=_get_company)
comodel_name -- 目标模型名称,除非是关联字段否则该参数必选
relation -- 关联的model在数据库存储的表名,默认采用comodel_name获取数据
column1 -- 与relation表记录相关联的列名
column2 --与relation表记录相关联的列名
domain -- 用于在客户端筛选数据的domain表达式
context -- 用于在客户端处理时使用
limit(integer) --在读取时限制数量
这些关联字段都可以用 domain, context等属性,视图上也有很多实用的小部件,等有时间我单独写一篇文章。
引用类型
related 字段
格式:fields.类型(related="字段名.类字段", store=True/False)
store=True 的意思是写入数据库,看需要做属性更改
reference字段
reference是比related更高级的引用字段,可以指定该字段引用那些模型范围内的模型的哪些字段的值,范围更广。(我没用过,等用了再回来补充)
保留字段
name(Char) -- _rec_name的默认值,在需要用来展示的时候使用
active(Boolean) -- 设置记录的全局可见性,当值为False时通过search和list是获取不到的
sequence(Integer) -- 可修改的排序,可以在列表视图里通过拖拽进行排序
state(Selection) -- 对象的生命周期阶段,通过fileds的states属性使用
parent_id(Many2one) -- 用来对树形结构的记录排序,并激活domain表达式的child_of运算符
parent_left,parent_right -- 与 _parent_store结合使用,提供更好的树形结构数据读取
这些我感觉不够清晰,等有空再来补充。odoo的模型还有比较有意思的缺省字段,比如 ID,state,active并不是说必须要写,有时候会自动生成一些你并没有定义的字段,这些我们成为缺省字段。
计算字段
计算字段并不是直接定义的,而是通过一个属性,compute来的得到的,任何类型的字段都可以是计算字段。格式为:
字段名=fields.类型(compute="函数名",store=True/false) #store定义了该动态改变的字段值是否保存到数据库表中
@api.depends(依赖的字段值)#depend的字段值一旦发生变化,就会触发该函数,从而更新compute字段值。
def 函数名(self):
self.字段 = 计算字段值
动态字段
动态字段就比较高深了,不单单是一种类型或者属性来说明的,需要用到方法和视图,可以这样理解,动态字段就像是类似于odoo的一种缺省字段,只不过不是像缺省字段字段一样安装模块或者升级的时候才会检测到,我下一篇文章讲一下,看别人动态字段的文章纯广告,想了解要收费,搞得我也有点想收费了,哈哈,开个玩笑。分享技术,共同进步。
平时很忙,但是给自己定了个目标,一天一篇博客。如果有哪里考虑不够充分的,或者错误的请评论,我每天晚上看。