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

Odoo中如何正确继承已继承视图?解决字段不存在报错

解决Odoo视图继承时retirement_age字段不存在的报错

这个报错的核心原因是Odoo加载你的继承视图时,找不到retirement_age字段的定义,或是视图继承的依赖关系没处理到位。咱们一步步排查修复:

1. 先确认retirement_age字段已在模型中正确定义

不管你是在第一个自定义模块(定义hr_contract_view_form_cayor的模块)里扩展hr.contract模型,还是在其他依赖模块中,必须先给该模型添加这个字段。示例Python代码如下:

from odoo import models, fields

class HrContract(models.Model):
    _inherit = 'hr.contract'

    retirement_age = fields.Integer(string="Retirement Age")
  • 要确保这段代码所在的Python文件已被添加到模块的__init__.py和__manifest__.py中,保证模块加载时能注册这个字段。
  • 先升级定义字段的模块,再处理视图继承的模块。

2. 检查模块依赖关系

你的第二个模块(继承自定义视图的模块)必须依赖第一个模块(定义hr_contract_view_form_cayor的模块)。在第二个模块的__manifest__.py里添加依赖:

'depends': ['base', 'hr_contract', '你的第一个模块技术名称'],

这样Odoo会先加载第一个模块的模型和视图,再加载第二个模块,避免出现找不到字段或视图的问题。

3. 验证视图继承的引用是否正确

检查第二个视图里的inherit_id引用:

<field name="inherit_id" ref="模块技术名称.hr_contract_view_form_cayor"/>

这里的模块技术名称必须是第一个模块的文件夹名称(也就是模块的技术标识),不能写错。比如第一个模块叫hr_contract_cayor,那这里应该写ref="hr_contract_cayor.hr_contract_view_form_cayor"。

4. 清理缓存并重新升级模块

有时候Odoo的视图缓存会导致奇怪的问题,你可以按以下步骤操作:

  • 先卸载第二个模块,再卸载第一个模块(如果需要)
  • 重新安装第一个模块,确保字段和基础视图正确加载
  • 再安装第二个模块

另外,也可以在开发者模式下进入设置 > 技术 > 用户界面 > 视图,找到这两个视图,确认它们的状态和继承关系是否正确。

修正后的继承视图示例

确保你的第二个视图代码没有语法错误,比如标签闭合正确,同时避免使用官方模块的命名空间:

<record id="hr_contract_view_form_inherited" model="ir.ui.view">
    <field name="name">hr.contract.grade.rank.form.inherit</field>
    <field name="model">hr.contract</field>
    <field name="inherit_id" ref="你的第一个模块技术名称.hr_contract_view_form_cayor"/>
    <field name="arch" type="xml">
        <data>
            <xpath expr="//group[@name='allowances_group1']" position="inside">
                <field name="medical_allowance" />
            </xpath>
        </data>
    </field>
</record>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:36