You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo序列生成异常:调用ir.sequence仅返回'/'的原因排查

Odoo序列生成仅返回'/'的问题排查与解决

你在开发图书馆卡片模型时,明明写了自动生成卡号的逻辑,但实际得到的只有'/',这个问题我太熟悉了,咱们一步步拆解原因并解决:

核心原因

你的代码里用了self.env['ir.sequence'].next_by_code('library.card.number') or '/',当next_by_code方法找不到对应代码的序列时,会返回None,这时候就触发了or '/',最终显示成了'/'。本质问题就是你指定的序列代码library.card.number在Odoo系统中还未创建,或者配置不匹配。

解决步骤

1. 确认序列是否存在

首先要打开开发者模式(后台右上角头像里选择"激活开发者模式"),然后进入设置 → 技术 → 序列 → 序列与标识符,在搜索框里搜索library.card.number,检查系统中是否有对应的序列记录。

2. 创建缺失的序列

如果搜索不到,就手动创建一个:

  • 点击"创建"按钮,重点填写以下字段:
    • 序列代码:必须和你代码里的library.card.number完全一致,大小写也不能出错
    • 名称:取个易识别的名字,比如"图书馆卡号序列"
    • 前缀:可按需设置,比如想生成LIB-0000001格式就填LIB-
    • 下一个号码:默认填1即可
    • 填充零:因为你卡号长度设为7,若无前缀直接填7,数字部分会自动补零到7位;有前缀则根据剩余位数填写
    • 实现:选择"标准"选项

3. 修正代码中的小细节

另外你代码里有几个Odoo字段参数的大小写问题,Odoo字段参数要求小写,比如String要改成string,Translate改成translate,修正后的完整代码片段:

class cardInfo(models.Model):
    _name = "library.card"
    
    card_number = fields.Char(string="Card Number", size=7, translate=True, readonly=True)
    user_name = fields.Many2one('student.student', string="Name")
    card_type = fields.Selection([('s', 'Student'), ('l', 'Staff')], string="Card Type")
    number_of_book_limit = fields.Integer(string="No Of Book Limit", default=0)
    
    @api.model
    def create(self, vals):
        seq = self.env['ir.sequence'].next_by_code('library.card.number') or '/'
        vals['card_number'] = seq
        return super(cardInfo, self).create(vals)

4. 测试验证

重启Odoo服务,更新你的模块,然后尝试创建新的图书馆卡片,这时候应该就能正常生成序列卡号了。

内容的提问来源于stack exchange,提问作者shyamli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:03