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

Odoo 13导入CSV联系人时自动序列编号失效问题求助

解决Odoo 13导入CSV时res.partner序列编号不自动生成的问题

我来帮你搞定这个问题!你遇到的核心问题是CSV导入时,create方法里的条件判断没有触发序列生成——当CSV里没有包含ref列时,vals字典里根本不存在'ref'这个键,导致你原来的if 'ref' in vals and vals['ref'] == False条件不成立,自然不会自动生成序列编号。

解决方案:修改create方法的判断逻辑

把判断条件改成更宽松的逻辑,只要ref字段为空(不管是显式传了空值,还是根本没传这个字段),就自动生成序列。同时你已经配置了no_gap类型的序列,能保证编号无间隙、不重复,我们只需要让导入场景也触发序列生成即可。

修改后的model.py代码如下:

class ResPartner(models.Model):
    _inherit = 'res.partner'
    ref = fields.Char(string='Reference', readonly=True)

    @api.model
    def create(self, vals):
        # 只要ref为空(没传字段或传了空值),就自动生成序列
        if not vals.get('ref'):
            vals['ref'] = self.env['ir.sequence'].next_by_code('partner')
        return super(ResPartner, self).create(vals)

为什么这个修改有效?

  • vals.get('ref')会返回vals里'ref'对应的值,如果'ref'不存在则返回None,not None结果为True,刚好覆盖CSV导入时没传ref的场景。
  • 不管是手动创建(此时vals里可能带ref: False)还是CSV批量导入(vals里没有ref键),都会触发序列生成逻辑。
  • 你在sequence.xml里设置的implementation="no_gap"已经让Odoo自动保证序列的连续性和唯一性,不用担心重复或间隙问题。

额外注意事项

  1. 如果你的CSV里有部分记录已经填写了ref值,修改后的代码会保留这些自定义值,只有空值的记录才会自动生成编号,完全符合需求。
  2. 你的init.py代码是用来给已有无ref的联系人补全编号,这个逻辑没问题,不需要修改。
  3. 测试导入时,确保CSV里的ref列要么留空,要么直接删除该列,这样导入的新联系人就会自动生成序列编号了。

内容的提问来源于stack exchange,提问作者Armando Peña

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:43:15