博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ODOO学习笔记七:ORM字段类型
阅读量:5035 次
发布时间:2019-06-12

本文共 4995 字,大约阅读时间需要 16 分钟。

转载请注明原文地址: 

一:Odoo中常用字段类型

基本字段类型9种:

Binary:二进制类型(文件类型),odoo中的Binary字段在视图层显示为一个文件上传按钮。可以把图片、音频、视频、文档等等文件以二进制形式保存。

Char:字符型,size属性定义字符串长度。

Boolean:布尔型

Float:浮点型,如 rate = fields.float('Relative Change rate',digits=(12,6)), digits定义数字总长和小数部分的位数

Integer:整型

Date:短日期,年月日,在view层以日历选择框显示。

Datetime:时间戳

Text:文本型,多用于多行文本框。可以用widget属性为它添加样式。

Html:与text类似,用于多行文本编辑,不过自带编辑器样式。

 

复杂类型2种:

Selection:下拉列表。

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是对象的方法。

fcnt_inv 是用于写本字段的函数或方法。

fcnt_search 定义该字段的搜索行为。

store 表示是否希望在数据库中存储本字段值,缺省值为False。不过store还有一个增强形式,格式为 store={'object_name':(function_name,['field_name1','field_name2'],priority)} ,其含义是,如果对象'object_name'的字段['field_name1','field_name2']发生任何改变,系统将调用函数function_name,函数的返回结果将作为参数(arg)传送给本字段的主函数,即fnct。

 

对象字段类型4种:

one2one: 一对一关系。

格式为:fields.one2one(关联对象Name, 字段显示名, ... )。在V5.0以后的版本中不建议使用,而是用many2one替代

many2one: 多对一关系,格式为:fields.many2one(关联对象Name, 字段显示名, ... )。可选参数有:ondelete,可选值为"cascade"和"null",缺省值为"null",表示one端的record被删除后,many端的record是否级联删除。

参数列表:comodel_name(string) -- 目标模型名称,除非是关联字段否则该参数必选domain -- 可选,用于在客户端筛选数据的domain表达式context -- 可选,用于在客户端处理时使用ondelete -- 当所引用的数据被删除时采取的操作,取值:'set null', 'restrict', 'cascade'auto_join -- 在搜索该字段时是否自动生成JOIN条件,默认Falsedelegate -- 设置为True时可以通过当前model访问目标model的字段,与_inherits功能相同

 

one2many: 一对多关系,格式为:fields.one2many(关联对象Name, 关联字段, 字段显示名, ... ),例:'address'=fields.one2many('res.partner.address', 'partner_id', 'Contacts')。

参数列表:comodel_name -- 目标模型名称,inverse_name -- 在comodel_name 中对应的Many2one字段domain -- 可选,用于在客户端筛选数据的domain表达式context -- 可选,用于在客户端处理时使用auto_join -- 在搜索该字段时是否自动生成JOIN条件,默认Falselimit(integer) -- 可选,在读取时限制数量

 

many2many: 多对多关系。

comodel_name -- 目标模型名称,除非是关联字段否则该参数必选relation -- 关联的model在数据库存储的表名,默认采用comodel_name获取数据column1 -- 与relation表记录相关联的列名column2 --与relation表记录相关联的列名domain -- 用于在客户端筛选数据的domain表达式context -- 用于在客户端处理时使用limit(integer) --在读取时限制数量

例如:'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'。

 

reference: 引用型已经很少使用了,可以忽略)

class Stage(models.Model):      _name = 'todo.task.stage'  (对应表名)    _order = 'sequence,name'      _description='类的描述,对应表的描述'     //以下是该类对应表中的字段们    # String fields:      name = fields.Char('Name', 40)      desc = fields.Text('Description')      state = fields.Selection(          [('draft','New'), ('open','Started'),('done','Closed')],          'State')      docs = fields.Html('Documentation')      # Numeric fields:      sequence = fields.Integer('Sequence')      perc_complete = fields.Float('% Complete', (3, 2))      # Date fields:      date_effective = fields.Date('Effective Date')      date_changed = fields.Datetime('Last Changed')      # Other fields:      fold = fields.Boolean('Folded?')      image = fields.Binary('Image')

(切记:每句后面不能有逗号 ,  否则不会同步到postgresql中。)

 

二:字段属性参数

 字段定义中可用的参数有:change_default,readonly,required,states,string,translate,size,priority,domain,invisible,context等。

change_default:别的字段的缺省值是否可依赖于本字段,缺省值为:False。

例如: 'zip'= fields.char('Zip', change_default=True, size=24),这个例子中,可以根据zip的值设定其它字段的缺省值,例如,可以通过程序代码,如果zip为200000则city设为“上海”,如果zip为100000则city为“北京”。

readonly: 本字段是否只读,缺省值:False。

required: 本字段是否必须的,缺省值:False

states: 定义特定state值才生效的属性,格式为:{'name_of_the_state': list_of_attributes},其中list_of_attributes是形如[('name_of_attribute', value), ...]的tuples列表。

如:'partner_id'=fields.many2one('res.partner', 'Partner', states={'posted':[('readonly',True)]})

string: 字段显示名,任意字符串。

translate: 本字段值(不是字段的显示名)是否可翻译,缺省值:False。

size: 字段长度。

invisible: 本字段是否可见,即是否在界面上显示本字段,缺省值True。

domain: 域条件,缺省值:[]。在many2many和many2one类型中,字段值是关联表的id,域条件用于过滤关联表的record

例:'default_credit_account_id'=fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]"),意思是:本字段关联到对象('account.account')中type不是'view'的record。

 

三:Odoo保留字段

  • 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自动化添加与修改的,可以在odoo调试模式下,点击一个model进行查看。如:

 

自动化属性主要有:

对应的数据库表中也会自动生成这些字段:

如果不想为model自动添加这些属性,可以在类中通过:

来关闭自动化属性。

 

五:动态计算

一个字段的值,可以通过一个函数来动态计算出来。定义格式如下:

字段名=fields.类型(compute="函数名",store=True/false) #store定义了该动态改变的字段值是否保存到数据库表中@api.depends(依赖的字段值)#在函数中,通过依赖的字段值计算出上面的字段值def 函数(self):    self.字段=计算字段值

示例:

 

六:关联字段

可以定义一个字段,其值关联其他类的一个字段值。

格式:

字段=fields.类型(related="关联类.字段",store=true/false)

转载于:https://www.cnblogs.com/zcy1103/p/8202663.html

你可能感兴趣的文章
Permutation Recovery
查看>>
WPF,Silverlight与XAML读书笔记第二十 - 控件之二 – 内容控件(命令控件)
查看>>
js补充之作用域
查看>>
12.4号
查看>>
安装JMeter
查看>>
虚方法与抽象方法有什么区别
查看>>
20181126-java-面试知识-收集
查看>>
POJ-3295 Tautology 枚举+DFS
查看>>
KRPano多屏互动原理
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>