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

Odoo10转Odoo12模块迁移报错:field_id非空约束违规求助

嘿,这个Odoo版本迁移的问题我之前处理过,给你两个靠谱的解决思路:

问题根源

这个错误是因为Odoo 12对ir.default模型的field_id字段新增了非空约束——你从Odoo10搬过来的代码里,<field name="field_id"/>是空值,直接违反了数据库的非空要求,所以触发了这个ParseError。

解决方案1:快速补全field_id字段

既然这个ir.default是给account.move.line模型设置批量操作的默认动作,你只需要给field_id指定该模型下任意一个存在的字段(比如id字段)就能满足约束要求:

<record model="ir.default" id="action_selected_account_move_line_values">
    <field name="name">Sélectionner les écritures</field>
    <!-- 指定account_move_line的id字段,确保引用正确 -->
    <field name="field_id" ref="account.field_account_move_line_id"/>
    <field name="key">action</field>
    <field name="key2">client_action_multi</field>
    <field name="value" eval="'ir.actions.act_window,' + str(ref('action_selected_account_move_line'))"/>
    <field name="binding_model_id" ref="model_account_move_line"/>
    <field name="object" eval="True"/>
</record>

注意要确认account.field_account_move_line_id这个外部ID是正确的,你可以在Odoo12的account_move_line模型里查看id字段的对应引用。

解决方案2:改用Odoo12规范的动作绑定(推荐)

Odoo12开始支持直接在动作记录上配置批量操作绑定,这种方式更符合新版本的设计逻辑,还能彻底摆脱ir.default的约束问题:

  1. 找到你定义的action_selected_account_move_line这个ir.actions.act_window记录
  2. 添加两个绑定字段:
<record model="ir.actions.act_window" id="action_selected_account_move_line">
    <!-- 保留你原来的所有字段配置 -->
    <field name="name">Sélectionner les écritures</field>
    <field name="res_model">account.move.line</field>
    <!-- ... 其他原有字段 ... -->
    <!-- 新增这两个字段实现批量动作绑定 -->
    <field name="binding_model_id" ref="model_account_move_line"/>
    <field name="binding_type">action_multi</field>
</record>
  1. 删除原来那段报错的ir.default记录

这样配置后,当你在account.move.line列表中选中多条记录时,系统会自动把这个动作作为批量操作选项,效果和原来完全一致,还更符合Odoo12的规范。

修改完成后重新升级模块,就能正常加载啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:54:48