Odoo 12自定义模型修改Form视图后出现KeyError('qualities')问题排查求助
问题分析:Odoo 12自定义模型修改视图触发KeyError: 'qualities'
你遇到的情况很典型:自定义模块安装后能正常使用,但只要修改Form视图里的任何内容(比如字段宽度),就会触发KeyError: 'qualities',错误指向registry.py中找不到这个模型。先把你提供的代码贴出来方便排查:
Python 模型代码
from odoo import models, fields, api, _ from odoo.tools import ustr import math # Setup test module-1 # Skip _name = when inherit product_template class Calc(models.Model): _name = 'calc' _description = 'Module t.b.v. calculation-functions' qualities_id = fields.Many2one(comodel_name="qualities", string="Karton kwaliteit") qualities_dikte = fields.Float(string="Golf dikte", related='qualities_id.golfdikte', readonly=True) qualities_ref = fields.Char(string="Reference", related='qualities_id.reference', readonly=True)
XML 视图片段
<div> <field name="qualities_id" class="oe_inline" /> <field name="qualities_dikte" class="oe_inline" /> <field name="qualities_ref" class="oe_inline" /> </div>
问题根源
这个错误的核心是:Odoo的模型注册表(Registry)里找不到qualities这个模型,但你的Calc模型里明确通过Many2one和关联字段引用了它。具体有这几种可能:
- 你根本没定义
qualities模型:只在Calc里用了comodel_name="qualities",但没有创建对应的模型类,Odoo完全不知道这个模型的存在。 qualities模型的定义有问题:比如模型类的_name写错了(比如写成quality而非qualities),或者模型所在的模块没安装、加载失败。- 模块依赖没配置:如果
qualities是在另一个自定义模块里,你当前的模块没有在__manifest__.py中声明依赖那个模块,导致Odoo加载时没有先加载qualities模型。
解决步骤
针对上述情况,你可以按顺序排查修复:
- 检查是否存在
qualities模型
如果没有,赶紧创建对应的模型类,示例代码如下:from odoo import models, fields class Qualities(models.Model): _name = 'qualities' _description = 'Karton Qualities' golfdikte = fields.Float(string="Golf dikte") reference = fields.Char(string="Reference") - 检查模块依赖(如果
qualities在其他模块)
打开当前模块的__manifest__.py,把包含qualities模型的模块加到depends列表中,比如:{ 'name': 'Calculation Module', 'depends': ['base', 'module_containing_qualities'], 'data': [ # 你的视图、数据文件路径 ], # 其他配置项 } - 升级模块
修改完成后,在Odoo后台找到你的模块,点击「升级」按钮,让Odoo重新加载模型和视图的配置。
内容的提问来源于stack exchange,提问作者Rc Charly
相关产品推荐
相关产品推荐

