odoo14: ir.sequence模型 自动生成唯一序列号

        📋总是需要自动编号的,物资要编号,档案要编号,怎么在odoo自动编号。

        odoo为我们提供了一个很好用的序列号生成工具 ir.sequence ,使用该工具只需要在数据文件中注册一条ir.sequence记录,在模型代码中就可以调用该序列。

        在创建用户、订单时,常常需要使用到序列来自动为该记录添加编号。 在odoo中,可以通过使用 ir.sequence 模块来生成序列。


一:代码实现:

1:创建字段

code = fields.Char(string="编码", default=lambda self: _('编码'), index=True, copy=False, tracking=True,readonly=True)

2:为该字段写一个方法

方法详解:

重写create方法,将字段设为只读,点击保存后会生成序列号

一旦调用ir.sequene模型不管是否使用,ir.sequence记录padding 都会累加,因此产生序列号的地方一般用在模型的create函数中。

#文件头部先导包
from odoo import fields, api, models
 
    @api.model
    def create(self, values):
        if values.get('code', _('编码')) == _('编码'):
            # customer.type:模型
            values['code'] = self.env['ir.sequence'].next_by_code('customer.type') or _('编码')
        # CustomerType:类名
        return super(CustomerType, self).create(values)

3:写序列规则

序列规则详解

创建:

模块下-(创建)data(文件夹)-(创建)ir_sequence_data.xml文件 写以下代码

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="master_data.customer_type_code_seq" model="ir.sequence">
            <field name="name">customer_type_code</field>
            <field name="code">customer.type</field>
            <field name="prefix">%(year)s%(month)s%(day)s</field>
            <field name="company_id" eval="False"/>
            <field name="padding">4</field>
        </record>
    </data>
</odoo>

各个参数的作用:

  • name - 名字,随便叫什么都行
  • code - 调用生成编码的 Key,需保证唯一性。(这里code参数与上面刚刚写的方法的那个next_by_code方法的参数值一致,如果涉及到跨模型的情况推荐将“_”变成“.”,并尽可能简化命名词量或以“模型.id”的形式以确保可以关联上对应的方法。但最好的方法就是模块名+自定义名,这样也便于源码阅读时的可读性,可以增强团队合作的效率和幸福度。)
  • prefix - 前缀,可以是固定的字符也可以是组合参数,%(year)s会被解析为%Y,并通过date的strftime函数解析出四位数的年份,month、day...的处理方法都是如此。因此,这里可以写的参数包括year、month、day、y、doy(day of year)、woy(week of year)、weekday、h23、h12、min、sec这10种的组合。还可以添加一些字符串前缀,比如SN,用来标识单据类别。
  • padding - 序列递增的位数 ,表示序列号数字部分的位数number_next表示序列号的递增数,比如number_next=1,则下一个序列号比上一个序列号增1。默认从001(取决于位数)开始。
  • suffix -后缀

4:manifest文件中注册该xml的data文件

'data': [
    'security/ir.model.access.csv',
    'data/ir_sequence_data.xml',
    'views/视图.xml',
],

注意!这里需要注意位置,odoo非常讲究先后顺序,错误的顺序将直接导致启用新库时出现文件丢失的报错。

5:不要忘记升级模块~

二:web端操作

1:查看当前模块序列号

        使用ir.sequence模型序列记录可以很方便的生成唯一指定规则序列号,但是有个缺点就是正常情况下不能查看及修改序列编号。

        如果我们又需要查看修改序列号该怎么做呢?首先打开debug开发者模式,然后点击设置--技术--序号,就可以修改指定模型的序列参数。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值