1. 基础字段

class odoo.fields.Field(string=, **kwargs)

(1)基本字段类型

字段类型 说明
Char(string) 是一个单行文本,唯一位置参数是string字段标签。
Text(string) 是一个多行文本,唯一位置参数是string字段标签。
Selection(selection, string) 是一个下拉选择列表。选项位置参数是一个 [(‘value’, ‘Title’),] 元组列表。元组第一个元素是存储在数据库中的值,第二个元素是展示在用户界面中的描述。该列表可由其它模块使用selection_add关键字参数扩展。
Html(string) 存储为文本字段,但有针对用户界面 HTML 内容展示的特殊处理。出于安全考虑,该字段会被清洗,但清洗行为可被重载。
Integer(string) 仅需字段标题字符串参数。
Float(string, digits) 带有第二个可选参数digits,该字段是一个指定字段精度的(x,y)元组,x 是数字总长,y 是小数位。
Monetary(string, currency_field) 与浮点字段类似,但带有货币的特殊处理。第二个参数currency_field用于存储所使用货币,默认应传入currency_id字段。
Date(string)和Datetime(string) 字段只需一个字符串文本位置参数。
Boolean(string) 的值为True 或False,可传入一个字符串文本位置参数。
Binary(string) 存储文件类二进制文件,只需一个字符串文本位置参数。它可由Python使用 base64编码字符串进行处理。

(2)特殊字段属性

属性 说明
name (通常为 Char)默认作为记录的显示名称。通过是一个 Char,但也可以是 Text 或Many2one字段类型。用作显示名的字段可修改为_rec_name模型属性。
active (Boolean型)允许我们关闭记录。带有active=False的记录会自动从查询中排除掉。可在当前上下文中添加{‘active_test’: False} 来关闭这一自动过滤。可用作记录存档或假删除(soft delete)。
state (Selection类型) 表示记录生命周期的基本状态。它允许使用states字段属性来根据记录状态以具备不同的 UI 行为。动态修改视图:字段可在特定记录状态下变为readonly, required或invisible。
parent_id和parent_path Integer (Char型)对于父子层级关系具有特殊意义。本文后续会进行讨论。

(3)常用字段属性

属性 说明
string 是字段的默认标签,在用户界面中使用。如未传入,ORM获取类中的字段名称大写作为默认名称
default 设置字段默认值。可以是具体值(如 active字段中的default=True),或是可调用引用,有名函数或匿名函数均可。
help 提供 UI 中鼠标悬停字段向用户显示的提示文本
readonly (布尔值,默认为False)readonly=True会使用户界面中的字段默认不可编辑。仅针对用户界面设置。
required (布尔值,默认为False)required=True使得用户界面中字段默认必填
index (布尔值,默认为False)index=True为字段添加数据库索引,让搜索更快速,但同时也会部分降低写操作速度。
copy copy=False让字段在使用 ORM copy()方法复制字段时忽略该字段。除 to-many 关联字段外,其它字段值默认会被复制。
groups groups可限制字段仅对一些组可访问并可见。值为逗号分隔的安全组XML ID列表,如groups=’base.group_user,base.group_system’。
states 传入依赖 state字段值的 UI 属性的字典映射值。可用属性有readonly, required和invisible,如states={‘done’:[(‘readonly’,True)]}。
oldname (string) 该字段的先前名称,以便ORM可以在迁移时自动重命名

(4)文本字段(Char, Text和Html)特有属性

属性 说明
size (Char) 设置最大允许尺寸。无特殊原因建议不要使用,例如可用于带有最大允许长度的社保账号。
translate 使用的字段内容可翻译,带有针对不同语言的不同值。
trim (默认值为 True),启动在网络客户端中自动去除周围的空格。可通过设置trim=false来取消。

(5)示例代码

class Book(models.Model):
...# String fieldsname = fields.Char('Title', required=True)isbn = fields.Char('ISBN')book_type = fields.Selection([('paper', 'Paperback'),('hard', 'Hardcover'),('electronic', 'Electronic'),('other', 'Other')],'Type')notes = fields.Text('Internal Notes')descr = fields.Html('Description')# Numeric fields:copies = fields.Integer(default=1)avg_rating = fields.Float('Average Rating', (3,2))price = fields.Monetary('Price', 'currency_id')currency_id = fields.Many2one('res.currency') # price helper# Date and time fieldsdate_published = fields.Date()last_borrow_date = fields.Datetime('Last Borrowed On',default=lambda self: fields.Datetime.now())# Other fieldsactive = fields.Boolean('Active?', default=True)image = fields.Binary('Cover')

2. 关系字段

当涉及到的不同模型间的数据时,使用关联字段来建立关系。

(1)字段类型

多对一:Many2one(comodel_name, string)

属性 说明
comodel_name 关联模型的名称(字符串)
domain 在客户端(domain或字符串)上设置候选值的可选域
context 处理该字段时在客户端使用的可选上下文(字典)
ondelete 删除关联记录时执行的操作;可选的值是: ‘set null’(置空), ‘restrict’(抛出错误,阻止删除), ‘cascade’(同时删除当前记录和关联记录)
auto_join 是否在搜索该字段时生成JOINs(布尔值,默认为False)
delegate 将其设置为True可以从当前模型访问目标模型的字段(对应于_inherits)
string 字段标签

一对多:One2many(comodel_name, inverse_name, string)

属性 说明
comodel_name 关联模型的名称(字符串)
inverse_name comodel_name中指向Many2one的字段,指向当前记录(字符串)
domain 在客户端(domain或字符串)上设置候选值的可选域
context 处理该字段时在客户端使用的可选上下文(字典)
auto_join 是否在搜索该字段时生成JOINs(布尔值,默认为False)
limit 读取记录时使用的可选限制(整数)
string 字段标签

多对多:Many2many(comodel_name)

属性 说明
comodel_name 关联模型的名称(字符串)
relation 存储数据库中关系的表的可选名称(字符串)
column1 关联表中字段名称(字符串)
column2 关联表中字段名称(字符串)
domain 在客户端(domain或字符串)上设置候选值的可选域
context 处理该字段时在客户端使用的可选上下文(字典)
limit 读取记录时使用的可选限制(整数)
string 字段标签

(2)操作代码

一对多:One2many

属性 说明
(0, 0,{ values }) 根据values里面的信息新建一个记录
(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

多对多:Many2many

属性 说明
(0,0,{values}) 根据values里面的信息新建一个记录。
(1,ID,{values}) 更新id=ID的记录(写入values里面的数据)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)
(3,ID) 切断主从数据的链接关系但是不删除这个数据
(4,ID) 为id=ID的数据添加主从链接关系。
(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)
(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行 (5) 再执行循环IDs执行 (4,ID))

(3)示例代码

class Book(models.Model): #书籍
...#出版商publisher_id = fields.Many2one('res.partner', # 关联模型string='Publisher')#作者author_ids = fields.Many2many('res.partner', # 关联模型string='Author')
class Partner(models.Model): #联系人模型
..._inherit = 'res.partner'#出版过的书籍published_book_ids = fields.One2many('library.book', # 关联模型'publisher_id', # 关联模型中所指向的字段string='Published Books')#作者的书籍book_ids = fields.Many2many('library.book', string='Authored Books')
<field name="users" eval="[(6,0,[ref('base.user_root')])]"/>

3.计算字段

计算字段,提供由函数计算出值的属性。

属性 说明
compute 计算字段的方法的名称
inverse 反转字段的方法,并写入(可选)
search 在字段上实现搜索的方法的名称(可选)
store 字段是否存储在数据库中(布尔值,默认情况下在计算字段上为False)
compute_sudo 是否应将该字段重新计算为超级用户以绕过访问权限(布尔值,默认为False)
related 通过关联模型的字段可在模型中直接可用,并且可通过点号标记法直接访问
class Book(models.Model):
...#计算字段的写法publisher_country_id = fields.Many2one('res.country', string='Publisher Country',compute='_compute_publisher_country'# store = False, # 默认不在数据库中存储inverse='_inverse_publisher_country',search='_search_publisher_country',)@api.depends('publisher_id.country_id')def _compute_publisher_country(self):for book in self:book.publisher_country_id = book.publisher_id.country_iddef _inverse_publisher_country(self):for book in self:book.publisher_id.country_id = book.publisher_country_iddef _search_publisher_country(self, opearator, value):return [('publisher_id.country_id', operator, value)]#关联字段的写法publisher_country_id = fields.Many2one('res.country', string='Publisher Country',related='publisher_id.country_id',)

参考文章:
https://alanhou.org/odoo12-structuring-data/
https://www.odoo.com/documentation/12.0/reference/orm.html#basic-fields

odoo 12: 字段(Fields)相关推荐

  1. Odoo 12开发之后台视图 – 设计用户界面

    Odoo 12开发之后台视图 – 设计用户界面 一·菜单项 # 菜单项形成一个层级结构,最顶层结构 # name 是展示在用户界面中的菜单标题 # action 是点击菜单时运行的窗口 # paren ...

  2. Odoo二次开发------Odoo常用字段类型

    版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处. 大家好.本篇文章主要讲述的内容是Odoo常用字段类型. 本文将从Odoo模型概述.Odoo的常规字段.自动字段和保留字段.常用字段属性. ...

  3. ElasticSearch 6.x 学习笔记:12.字段类型

    ElasticSearch 6.x 学习笔记:12.字段类型 欢迎转载. https://blog.csdn.net/chengyuqiang/article/details/79048800 12. ...

  4. odoo 的字段。orm对象

    OpenERP ORM 对象方法列表 OpenERP对象支持的字段类型有,基础类型:char, text, boolean, integer, float, date, time, datetime, ...

  5. 【Groovy】编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )

    文章目录 一.AST 语法树分析 一.AST 语法树分析 在上一篇博客 [Groovy]编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 ) ...

  6. 用pycharm搭建odoo 12, 11,10 开发调试环境

    用pycharm搭建odoo 12, 11,10 开发调试环境 个人认为在windows平台下Pycharm 是最好的 odoo开发工具, 配置简单,操作简便,界面清爽,支持远程调试python,ja ...

  7. 文档(Documents), 字段(Fields), 及模式设计(Schema Design)

    1. 文档(Documents), 字段(Fields), 及模式设计(Schema Design) 1.1 概览 1.1.1 Solr的Schema文件 Solr在schema文件中存储它需要知道的 ...

  8. eclipse文档注释设置、文件(Files)注释标签、类型(Types)注释标签(类的注释)、字段(Fields)注释标签、构造函数(Constructor)标签

    文章目录 1.文件(Files)注释标签 2.类型(Types)注释标签(类的注释) 3.字段(Fields)注释标签 4.构造函数(Constructor)标签 5.方法(Methods)标签 6. ...

  9. 全球排名第一的免费开源ERP Odoo 12产品发布会北京站开始报名

    Odoo V12 产品(北京)发布会 暨企业数字化转型论坛 快速报名通道:http://odoochina.mikecrm.com/uG8nNu4 随着新版本Odoo 12的发布,开源智造(OSCG. ...

  10. odoo 12 : 附件(ir.attachment)——同一模型多个附件字段

    一.问题 一个模型(Model)中,添加多个可上传附件(ir.attachment)的字段 二.解决方案 模型:Amodel.py class Amodel(models.Model):--first ...

最新文章

  1. “cyl projection cannot cross pole” 解决方法
  2. RocketMQ 一行代码造成大量消息丢失
  3. struts2中struts.xml的http://struts.apache.org/dtds/struts-2.3.dtd文件路径
  4. 欧拉定理扩展欧拉定理(证明)
  5. L1-041 寻找250
  6. 企业级 CICD 工具部署 Serverless 应用的落地实践
  7. neo4j cypher_Neo4j:使用Cypher生成实时建议
  8. 前端学习(2630):git安装包下载
  9. Python的Pexpect详解 [图片]
  10. JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用 1
  11. ORACLE语句两表相减,Oracle中两个date相减
  12. Spring AOP动态代理原理与实现方式
  13. 如何将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为『12,000,000.11』...
  14. 姜启源《数学模型》第12章:马氏链模型
  15. PDF编辑器哪个好,怎么在PDF中添加图片
  16. 使用Requests爬取网页图片并保存
  17. 生成树协议(一)STP协议原理简介:广播风暴、MAC地址表震荡实验、STP工作原理、BPDU简介、STP故障处理
  18. 高通Android display分析【转】
  19. 华为二手价格表(最新2022.2.16)
  20. 查看PFX证书的信息

热门文章

  1. 汇编语言程序设计51单片机
  2. 云杰恒指:期货交易操盘手是怎样的体验?
  3. 应该像许三多学习的职业态度!
  4. 深度学习中Batch size对训练效果的影响
  5. 安卓开发学习之锁屏的实现
  6. windows10下安装Vue.js的方法
  7. 网络安全实战之植入后门程序
  8. 使用pip出现报错:Could not find a version that satisfies the...No matching distribution distributio...
  9. 交通分析小区TAZ生成——以武汉市为例
  10. Windows下修改本机域名localhost