Skip to content

Files

Latest commit

Apr 26, 2025
ee6d294 · Apr 26, 2025

History

History

demo_sequence

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Sep 20, 2020
Sep 20, 2020
Sep 20, 2020
Sep 20, 2020
Apr 26, 2025
Sep 20, 2020
Sep 20, 2020

odoo 觀念 - sequence

建議觀看影片, 會更清楚 😄

Youtube Tutorial - odoo 手把手教學 - sequence

建議在閱讀這篇文章之前, 請先確保了解看過以下的文章 (因為都有連貫的關係)

odoo 手把手建立第一個 addons

本篇文章主要介紹 odoo 中的 sequence 這部份

說明

先來看 data/sequence_data.xml

<data noupdate="0">
  <record id="demo_sequence_id" model="ir.sequence">
      <field name="name">demo_sequence_sequence</field>
      <field name="code">demo.sequence</field>
      <field name="active">True</field>
      <field name="prefix">%(year)s%(month)s%(day)s</field>
      <field name="padding">5</field>
      <field name="number_next">1</field>
      <field name="number_increment">1</field>
  </record>
</data>

這邊是設定 sequence 的資料, 以下說明參數所代表的意義,

name sequence 名稱.

code sequence 的 code. (通常我會把它定義和 model 名稱一樣).

active 是否 active.

prefix 依照自己的需求定義, 這邊範例式增加 年月日.

padding sequence size (字元數).

number_next 下一個顯示的數字.

number_increment 每次增加數字的單位.

這些資訊也可以在 odoo 的介面上看到

路徑 Technical -> Sequences & Identifiers -> Sequences

alt tag

點進去會看到

alt tag

當然, 你也可以在這邊修改.

再來看 models/models.py

......
class DemoSequence(models.Model):
    _name = 'demo.sequence'
    _description = 'Demo Sequence'

    name = fields.Char(string='Name', required=True)
    sequence = fields.Char(string="sequence", readonly=True)

    @api.model
    def create(self, vals):
        seq = self.env['ir.sequence'].next_by_code('demo.sequence') or '/'
        vals['name'] = '{}_{}'.format(seq, vals['name'])
        new_record = super().create(vals)
        return new_record

重點就在 create 裡面, 在 odoo 中, 只要你建立一比 record, 就會去呼叫 create,

這邊我們去覆寫它, 將 name 加上 sequence.

next_by_code('demo.sequence') 這端就是去呼叫你自己定義的 sequence code.

來看一下效果,

新建一筆 record, 名稱為 test

alt tag

儲存後你會發現加上了你自己定義的 sequence

alt tag

這邊要另外說明一下 Implementation 這個參數, 它有兩個選項,

分別是 Standard(預設), No gap

alt tag

假設今天的 sequence 是 001, 我們再建立一比, 這時候是 002,

當我們把 002 這筆刪除, 然後再建立一筆新的, 這時候差異就多來了 😄

Standard(預設)

新的那一筆會是 003.

No gap

新的那一筆會是 002.

如果你把此範例改成 No gap, 是不會產生效果的, 應該是要搭配其他的 code.

(以後我再補充給大家, 或自行去閱讀 source code 參考寫法 😄)