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

Odoo16嵌套树视图重启服务器后初始空白,点击后才显示数据

Odoo16嵌套树视图初始空白问题解决方案

问题现象

在Odoo16中实现树视图嵌套展示数据,定义job.description与job.description.details两个模型,通过details_ids(One2many字段)关联。新增数据时可正常保存并显示,但服务器重启后,打开记录时嵌套的树视图初始为空白,点击表头或添加行后数据才会显示。尝试将details_ids改为compute字段后,数据完全消失。

问题原因

  1. 视图XML配置错误:嵌套树视图指定的view_id为view_work_plan_goals_tree,但实际定义的子模型树视图ID是view_job_description_details_tree,ID不匹配导致初始加载时无法正确渲染子视图数据。
  2. Compute字段误用:将原生One2many字段改为compute字段时,搜索条件错误(用record.job_id.id替代了当前记录的id),且未配置inverse方法,导致数据无法正确关联和存储,最终数据消失。此外重写read方法属于多余操作,反而干扰了Odoo的原生数据读取逻辑。

解决方案

1. 修正视图XML配置

将嵌套树视图的view_id改为正确的子模型树视图ID,确保视图关联正确:

<odoo>
    <data>
        <record id="view_job_description_details_tree" model="ir.ui.view">
            <field name="name">job.description.details.tree</field>
            <field name="model">job.description.details</field>
            <field name="arch" type="xml">
                <tree editable="bottom">
                    <field name="key_result_area"/>
                    <field name="principal_accountabilities"/>
                </tree>
            </field>
        </record>
        <record id="view_job_description_tree" model="ir.ui.view">
            <field name="name">job.description.form</field>
            <field name="model">job.description</field>
            <field name="arch" type="xml">
                <tree>
                    <field name="job_id"/>
                    <field name="job_purpose"/>
                    <field name="details_ids" widget="one2many_list" options="{'no_create': True}">
                        <!-- 修正view_id为正确的子视图ID -->
                        <tree string="Details" editable="bottom" view_id="view_job_description_details_tree"/>
                    </field>
                </tree>
            </field>
        </record>
    </data>
</odoo>

2. 恢复原生One2many字段定义

不需要使用compute字段,保留最初的模型关联即可,Odoo原生One2many字段会自动维护关联关系:

class JobDescription(models.Model):
    _name = 'job.description'
    _description = 'Job Description'

    job_id = fields.Many2one('hr.job', string='Job Position', readonly=True)
    job_purpose = fields.Text(string='Job Purpose', required=True)
    # 保留原生One2many字段,无需compute
    details_ids = fields.One2many('job.description.details', 'job_description_id', string='Details')
class JobDescriptionDetails(models.Model):
    _name = 'job.description.details'
    _description = 'Job Description Details'

    key_result_area = fields.Text(string='Key Result Area', required=True)
    principal_accountabilities = fields.Text(string='Principal Accountabilities', required=True)
    job_description_id = fields.Many2one('job.description', string='Work Plan', ondelete='cascade')
    # 添加ondelete='cascade',确保主记录删除时子记录同步删除

3. 生效配置

完成代码修正后,升级对应模块,清除Odoo缓存并重启服务器,确保配置生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:12