导言
如果你曾在销售订单上填写过数量、记录任务拖延天数,或为潜在客户设定优先级分数,那你就已经在 Odoo 中用过整数字段。它在 Odoo 的数据模型里无处不在,但常常被认为太普通而被忽视。
对配置表单的业务人员、编写自定义模块的开发者,以及为客户设计数据模型的顾问来说,理解整数字段的行为和边界条件非常重要。
本指南将说明整数字段保存什么类型的数据、在 Odoo 框架与界面中的表现、如何用 Odoo Studio 或 Python 添加与定制该字段,以及常见应用与需要注意的细节。
什么是 Odoo 中的整数字段
在 Odoo 的 ORM 里,整数字段用于保存整数量值——不含小数或分数。它在数据库层面对应 PostgreSQL 的 INTEGER 类型(4 字节有符号整数),大致可表示从负二十亿到正二十亿的范围。
对最终用户而言,整数字段就是表单里的一个数字输入框、列表视图里的数值列。凡是以“整件”计数的场景最适合使用整数:库存件数、评分、以天为单位的时长、序号等。
典型的代码定义示例(开发者视角)
示例代码展示了如何在继承模型时新增一个整数字段,例如在任务模型上加上预计工时字段:
字段定义中的 string 参数决定界面显示标签,default 参数定义新记录的初始值。
在 Odoo Studio 里,这种字段直接称为 Integer。通过 Studio 新建的字段会自动带上 x_studio_ 前缀;通过代码或 API 创建时,则由开发者自行命名技术字段名。
字段的工作原理概述
当你在模块中定义一个整数字段时,框架会在安装或升级模块时自动在数据库中创建相应的列,无需手动写 SQL 迁移。
数据库层面该列就是 PostgreSQL 的 INTEGER。ORM 会做类型转换:如果用户不输入任何值,整数字段通常返回 0(而不是 None 或 False),这一点与 Float 或 Char 等类型不同,后者在为空时可能返回 False。
关键字段属性
下面是可以配置的几个重要属性:
- string:界面上显示的标签。
- default:新建记录时的默认值;若不指定,整数字段通常默认为 0。
- required:将字段设为必填。因为默认是 0,这项设置主要在你希望阻止保存为零时才有实际效果。
- readonly:禁止用户在界面上修改该值。
- index:为该列创建数据库索引,加速基于该字段的筛选与搜索。
- compute:指定一个 Python 方法来动态计算字段值。
- store:配合 compute 使用,控制计算结果是否持久化到数据库或每次按需计算。
- copy:控制复制记录时该字段值是否随记录一起复制。
- groups:限制哪些用户组可以看到或编辑该字段。
在视图中的呈现方式
在表单视图中,整数字段会呈现为数字输入框。Odoo 在显示较大数值时会自动添加千位分隔符以提升可读性。
在列表视图中,整数以右对齐的纯数字显示;在搜索视图中支持等于、大于、小于等比较过滤。
你还能为整数字段指定特殊 widget 来改变呈现,例如 priority 小部件把整数显示为可点击的星级,progressbar 小部件可将整数值按最大值渲染为进度条。
与 Odoo ORM 的交互
对开发者来说,读写整数字段很直接:字段值在 Python 中始终是 int。注意空值会被视为 0,因此在判断“是否存在值”时要谨慎,否则无法区分未填写与刻意填写为零的情形。
整数字段可以直接用于计算字段、视图的域(domain)过滤、服务器动作与自动化动作等场景,ORM 对其支持良好。
典型的业务场景
核心应用场景一览
1. CRM:线索评分
销售团队常用整数字段为商机打分以便排序与优先级管理。可以在 crm.lead 上加一个自定义整数字段“线索得分”,由销售手动维护或通过自动化规则根据公司规模、预算和互动频率计算得出。
这样就能按分数对销售管道排序,把精力投向最有价值的机会。
2. 销售:最小订购数量
在销售与库存模块中,整数字段用于设置商品的最小起订量。把某件商品的最小订购量设为 10,可在订单创建时阻止小于该数量的购买请求,减少事后往返沟通。
3. 库存:补货规则
补货规则依赖整数字段来定义最低库存和最高库存阈值。当库存低于最低值时,Odoo 会触发补货至设定的最高值。正确设置这些整数对于避免缺货或积压至关重要。
4. 项目管理:故事点与工时估算
使用 Odoo Project 做敏捷开发时,团队常会添加故事点或估算工时的整数字段。该字段显示在看板与列表上,帮助团队评估容量与冲刺速度。
5. 会计:付款期限天数
会计中的付款期限通常用整数来表示天数(如 Net 30、Net 60),这些整数直接参与发票到期日的计算,对现金流管理有直接影响。
如何创建或定制整数字段
添加整数字段的两种常见方法
使用 Odoo Studio 无需编码,或通过 Python 在模块中定义以获得更高可控性。
使用 Odoo Studio 的步骤概览
- 在你想修改的表单页面打开对应视图。
- 从右上角激活 Studio 模式。
- 在左侧字段面板拖放 Integer 字段到表单上。
- 设置标签、是否必填与默认值等属性。
- 保存并退出 Studio。
Studio 会自动在 ir.model.fields 中注册该字段并加上 x_studio_ 前缀,变更立即在表单与列表视图中生效。
使用 Python(技术化定制)
开发者可在自定义模块的模型类里直接定义整数字段以便版本控制与更精细的配置:
示例代码展示了在 crm.lead 上新增 x_lead_score 字段,并可以同时声明 index、help 等属性。
在代码中定义字段后,通过更新模块(例如执行 odoo-bin -u your_module)使数据库列自动创建并生效。
通过 XML-RPC API 创建字段
在无法直接访问服务器时,也可以用 XML-RPC 远程创建字段,适用于自动化部署场景:
示例展示了通过 ir.model.fields 的 create 接口远程新增一个整数类型字段。
使用 XML-RPC 时,整数字段的 ttype 为 'integer',并且 state 应标记为 'manual' 表示这是自定义字段而非模块内定义的字段。
添加计算型整数字段
计算型(computed)整数字段适合自动派生值,例如统计某项目下的未完成任务数:
示例代码演示了在 project.project 上定义 open_task_count 字段,并通过 search_count 计算关联未折叠的任务数。
把 compute 字段设为 store=True 会把计算结果写入数据库,从而可以在列表视图中用于筛选和排序而无需每次实时计算。
最佳实践要点
提高整数字段使用效果的实用建议
用于计数与整单位场景
当值必须为整数且不允许小数时选择 Integer。如果涉及金钱、测量或允许小数的数量,应使用 Float 或 Monetary 类型。
为默认值做合理设置
整数字段的默认值通常是 0,很多场景没问题,但要考虑 0 是否有特殊含义。如果 0 表示“尚未设置”,可在业务逻辑中额外处理或增加一个布尔字段来显式标记是否已赋值。
经常用于筛选的字段请添加索引
若计划频繁按该字段筛选、排序或分组,应在字段定义中加上 index=True。索引会提升大数据量查询性能,代价是占用少量存储并略微增加写入开销,但对于搜索字段通常是值得的。
为计算字段设置 store=True
若计算型整数需要在列表视图中筛选或分组,务必设置 store=True,否则无法在域中过滤或用于分组。
为取值范围撰写说明
如果某整数有明确范围(比如 0–100),应在 help 参数中写清楚,界面会显示为提示,避免用户猜测有效值。
不要用整数随意存主键或引用
若需引用其他记录,应使用 Many2one 字段而不是把 ID 直接存为 Integer。Many2one 提供跳转、级联规则和完整的 ORM 集成,而把原始 ID 存为整数会绕开框架、增加脆弱性。
常见错误与陷阱
常见错误与陷阱汇总
混淆整数与浮点
把应允许小数的场景用成 Integer 会导致用户输入的小数被截断并丢失精度,造成数据错误与混淆。若可能出现 1.5、0.25 等值,应选 Float 或 Monetary。
认为零等于空值
整数字段空值会被视为 0,无法区分“未填写”与“刻意填写为 0”。若需区分,请增加类似 has_score 的布尔字段,或用允许 False 的其他字段类型来表示“未设置”。
在频繁作为筛选条件的字段上不建索引
把常用作筛选的整数字段建索引能避免大表查询变慢。事后再补索引不如一开始就规划好。
用整数存小数比例或百分比
有时有人把百分比以整数形式保存(如 75 表示 75%),但当出现 72.5% 的需求时就不再适用。如果比例可能需要小数精度,应直接使用 Float。
忘记为用于筛选的计算字段设置 store=True
这是 Odoo 开发中常见的陷阱:未持久化的计算字段不能用于域过滤、自动化动作或分组操作。上线前请确认字段将在哪些场景被使用。
总结
总结要点
整数字段是 Odoo 数据模型的基础构件之一。它看起来简单,但关键行为(如空值返回 0、计算字段需 store=True 才能用于过滤)会影响系统设计和后期维护。理解并应用这些细节能避免难以排查的问题。
无论是为销售团队配置系统、开发定制模块,还是为仓库设计补货规则,掌握何时使用整数、何时选择浮点/货币类型,并了解 Studio 与代码两种实现方式,都会让你的 Odoo 实施更稳健、更易维护。
寻找 Odoo 专家协助
在 Dasolo,我们帮助企业在各类业务场景中实施、定制并优化 Odoo。无论是构建清晰的数据模型、开发字段与工作流,还是通过 API 与外部系统对接,我们都有丰富实战经验,能把事情做对。
如果你对当前的 Odoo 配置有疑问,或想讨论具体项目, 请联系并咨询我们的团队,我们乐意为你提供支持与建议。