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的约束问题:
- 找到你定义的
action_selected_account_move_line这个ir.actions.act_window记录 - 添加两个绑定字段:
<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>
- 删除原来那段报错的
ir.default记录
这样配置后,当你在account.move.line列表中选中多条记录时,系统会自动把这个动作作为批量操作选项,效果和原来完全一致,还更符合Odoo12的规范。
修改完成后重新升级模块,就能正常加载啦~
内容的提问来源于stack exchange,提问作者omas
相关产品推荐
相关产品推荐

