odoo14 | 序列号的生成以及格式

上面两个图是创建用户后自动生成的,字段为code,且当前设置为不可编辑

那么它是如何实现的?

首先创建字段

code = fields.Char(string='员工编号', readonly=1)

 这一字段创建后,为该字段写一个方法

#文件头部先导包
from odoo import fields, api, models

@api.model
    def create(self, values):
        if not values.get('code'):
            values['code'] = self.env['ir.sequence'].next_by_code('hr_employee_pro_data_worker_id')
        return super(HrEmployeePro, self).create(values)

 这里的next_by_code方法将自动计数,里面的参数是从data文件中传过来的

在模块文件夹中新建data文件夹以存放data文件

 然后在里面新建一个xml文件hr_xxxx_data.xml

并按如下代码写入

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <data noupdate="1">
        <record id="hr_employee_pro_data_id_make" model="ir.sequence">
          <field name="name">基础信息工号生成</field>
          <field name="code">hr_employee_pro_data_worker_id</field>
          <field name="prefix">%(year)s%(month)s%(day)s</field>
          <field name="padding">3</field>
        </record>
    </data>
</odoo>

ir.sequence是odoo原生提供的一个很好用的序列号生成器

这里code参数与上面刚刚写的方法的那个next_by_code方法的参数值一致,如果涉及到跨模型的情况推荐将“_”变成“.”,并尽可能简化命名词量或以“模型.id”的形式以确保可以关联上对应的方法。

padding是指在prefix格式生成的序列号后加几位的序号,这里设置是3位,所以默认从001开始。

注意id不要与其他id重复,最好的方法就是模块名+自定义名,这样也便于源码阅读时的可读性,可以增强团队合作的效率和幸福度。

prefix格式odoo官方也提供了,在设置-技术-序号中可以查看到,可以参考使用

 最后注意不要忘记在__manifest__.py文件中注册该xml的data文件

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

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

最后升级或安装模块,然后就可看到效果。

上面说到,padding是默认从001开始,可以在开发者模式下进入设置-技术-序号中查看,下面展示我这一演示模型的序号页面

若期望下一自动生成的员工编号从5开始,则在“下一号码”处修改为5即可。

可以看到修改后保存,返回员工界面后新建一个员工“张三”,他的员工编号已经从005开始了。 

本篇涉及的技术感谢我的同事璐哥的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值