如何在 Odoo 19 中创建序列

如何在 Odoo 19 中创建序列

你是否好奇过,Odoo 是如何自动以整洁、递增的方式生成采购订单、销售订单和发票编号的?序列就是实现这一功能的核心。无论你是在开发自定义应用,还是扩展现有模块,创建专属序列都是每个 Odoo 开发者必备的关键技能。

本教程将教你通过**前端(Odoo 界面) 代码(Python + XML)**两种方式,在 Odoo 19 中创建自定义序列号。学完后,你将能够为自定义模块中的任意模型生成唯一标识符。

第一步:通过代码创建序列

你可以在自定义模块中通过 XML 定义序列,再通过 Python 在需要时调用该序列。

XML:定义序列规则

在你的模块中创建文件,路径为 data/sequence_data.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data noupdate="1">
        <record id="seq_custom_model" model="ir.sequence">
            <field name="name">自定义序列</field>
            <field name="implementation">standard</field>
            <field name="code">custom.model</field>
            <field name="prefix">CUST/%(year)s/</field>
            <field name="suffix">CUST/%(year)s/</field>
            <field name="number_next_actual">10/</field>
            <field name="padding">5</field>
            <field name="number_next">1</field>
            <field name="number_increment">1</field>
            <field name="company_id" eval="False"/>
        </record>
    </data>
</odoo>

参数说明

  • name:序列的可读名称
  • code:技术编码(Python 中通过该编码获取下一个编号)
  • prefix:序列前缀(如年份、固定文本)
  • suffix:序列后缀(如年份、固定文本)
  • padding:数字位数(例如 5 表示生成 00001、00002 等格式)
  • number_next_actual:起始编号(默认:1)
  • number_increment:编号递增步长(默认:1)
  • company_id:设置后按公司生效(适用于多公司环境)
  • implementation :分配序列号时,no gap(无间隔)模式会确保已分配所有前置序列号,该模式不会在分配时跳过编号,但删除记录仍会产生间隔,且性能比 standard(标准)模式更慢

日期时间格式变量

年份格式
  • 带世纪的当前年份 (%(year)s):显示完整年份(如 2026)
  • 不带世纪的当前年份 (%(y)s):显示年份后两位(如 26)
月份与日期
  • 月份 (%(month)s):以数字显示当前月份(01--12)
  • 日期 (%(day)s):以数字显示当月日期(01--31)
  • 一年中的第几天 (%(doy)s):显示年内天数(001--366)
周信息
  • 一年中的第几周 (%(woy)s):显示年内周数(00--53)
  • 星期几 (%(weekday)s):以数字显示星期(0--6,周一=0)
时间格式
  • 24小时制小时 (%(h24)s):显示 00--23 小时
  • 12小时制小时 (%(h12)s):显示 01--12 小时
  • 分钟 (%(min)s):显示当前分钟(00--59)
  • 秒 (%(sec)s):显示当前秒数(00--59)
ISO 8601 日期标准
  • ISO 带世纪年份 (%(isoyear)s):显示 ISO 周制年份(如 2026)
  • ISO 不带世纪年份 (%(isoy)s):显示 ISO 年份后两位
  • ISO 周数 (%(isoweek)s):显示 ISO 周数(01--53)

Python:调用序列

在你的模型文件中(例如 models/custom_model.py):

使用相同的编码(ir.sequence.next_by_code('编码'))在 Python 模型中获取下一个编号。

python 复制代码
# -*- coding: utf-8 -*-
from odoo import api, fields, models

class CustomModel(models.Model):
    _name = 'custom.model'
    _description = '带有序列的自定义模型'
    name = fields.Char(string='编号', required=True, copy=False, readonly=True,
                       default=lambda self: '新建')
    description = fields.Text(string="描述")
    
    @api.model_create_multi
    def create(self, vals):
        """ 重写创建方法,为自定义模型记录应用序列编码 """
        if vals.get('name', '新建') == '新建':
            vals['name'] = self.env['ir.sequence'].next_by_code('custom.model') or '新建'
        return super(CustomModel, self).create(vals)

更新 manifest.py

确保在清单文件中加载你的 XML 数据文件:

python 复制代码
'data': [
    'data/sequence_data.xml',
],

第二步:通过 Odoo 前端界面(UI)创建序列

如果你不想编写代码,Odoo 支持直接在界面中创建序列:

进入路径:设置 > 技术 > 序列与标识符 > 序列

点击创建 ,并填写下表中的字段:

字段 用途
名称 序列的自定义名称
实现方式 下拉选项:标准、无间隔
序列编码 唯一的技术编码
前缀 序列记录的前缀值
后缀 序列记录的后缀值
序列长度 Odoo 会自动在"下一个编号"左侧补 0,达到指定长度
下一个编号 序列的起始值
增量 序列编号的递增步长
公司 设置后按公司生效(多公司环境)

分配序列号时,无间隔序列模式会确保已分配所有前置序列号。该模式不会在分配时跳过编号,但删除记录仍会产生间隔。此外,无间隔模式的性能比标准序列模式更慢。

注意 :通过 Odoo 界面创建的序列不会自动应用 到自定义模型。若要使用该序列,必须重写模型的 create() 方法,并通过 ir.sequence.next_by_code() 生成序列。

通过界面创建的序列后续可直接编辑,调整格式、前缀、长度或重置规则,无需修改模型代码。

在 Odoo 19 中创建序列既强大又灵活。你可以通过代码定义序列,实现模块跨环境的可移植性;也可以直接在前端配置,实现快速设置。序列能帮助你在业务流程中保持数据的有序性和一致性。

在 Odoo 19 中,序列是维持系统内记录标识有序、统一、唯一的核心组件。无论你通过代码配置(实现更精准的控制和可移植性),还是通过界面设置(实现快速修改),序列都能满足实际业务流程的灵活需求。

掌握前缀、长度、日期格式、实现类型的配置方法,你就能创建实用、可扩展的序列。精通序列不仅能优化数据结构,还能让你的 Odoo 应用更专业、更易追溯。

总结

  1. 代码创建序列:XML 定义规则 + Python 重写create方法调用,适合模块开发、跨环境迁移
  2. 界面创建序列:可视化配置,无需代码,适合快速修改和调整
  3. 序列核心参数:编码(唯一标识)、前缀/后缀、长度、起始号、递增步长
相关推荐
odoo中国9 天前
Odoo 19 财务功能概述:财务模块中的定期存货计价(期末库存结转)
odoo·库存管理·财务管理·odoo19·库存计价·库存估值·期末库存结转
odoo中国11 天前
Odoo 19 库存功能实操:产品包装的设置与管理
odoo·仓库管理·odoo19·包装设置与管理
云草桑11 天前
Odoo 19.0 Docker Desktop快速部署 和Ubuntu24上安装1panel面板
运维·docker·容器·odoo
odoo中国16 天前
Odoo 19 采购功能:如何创建与管理产品类别,实现更智能的采购
odoo·odoo19·产品类别·采购类别·产品类别配置
Odoo老杨21 天前
成长型企业 ERP 系统选型:SAP 与 Odoo 免费开源 ERP 全面对比
sap·odoo·erp·中小企业数字化
linjun1863492 个月前
Odoo MTO 和智能MTO 完全解读:从源码到实战
odoo
云草桑2 个月前
15分钟快速了解 Odoo
数据库·python·docker·postgresql·.net·odoo
山上春2 个月前
Odoo 18 Web 客户端架构深度解析与 Navbar 差异化定制研究报告
odoo
山上春3 个月前
ONLYOFFICE Odoo 集成架构深度解析与实战手册(odoo文件预览方案)
架构·odoo