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

Odoo三级关联模型数据录入报错:无效字段'name'解决方案

Odoo嵌套模型录入报错解决方案

问题核心

录入zm.strategic.strategy时触发zm.strategic.plans无name字段的错误,本质是Odoo默认依赖主模型的标识字段(通常为name),或关联逻辑/上下文传递存在错误。以下是针对性解决步骤:

1. 补全主模型标识字段

若zm.strategic.plans未定义name字段,需补充定义;若使用其他字段作为标识,需指定_rec_name:

class ZmStrategicPlans(models.Model):
    _name = 'zm.strategic.plans'
    # 方案1:直接添加name字段
    name = fields.Char(string='计划名称', required=True)
    # 方案2:指定现有字段作为标识(如计划编码)
    # _rec_name = 'plan_code'

2. 检查视图上下文与嵌套字段定义

确保zm.strategic.plans的form视图中,嵌套字段的上下文未错误依赖不存在的name字段,示例正确的嵌套视图结构:

<field name="objectives">
    <tree editable="bottom">
        <field name="name"/>
        <field name="strategies">
            <tree editable="bottom">
                <field name="name"/>
                <!-- 其他策略字段 -->
            </tree>
        </field>
    </tree>
</field>

删除视图context中类似{'default_name': parent.name}的错误配置。

3. 修正关联模型的默认值逻辑

检查zm.strategic.strategy模型是否存在依赖主模型name的默认值,比如:

# 错误示例:默认值依赖主模型不存在的name字段
name = fields.Char(default=lambda self: self.env.context.get('default_plan_name'))

将其修改为依赖主模型已存在的字段,或移除错误的默认值配置。

4. 验证关联字段配对正确性

确保三个模型的One2many/Many2one关联完全匹配:

  • zm.strategic.plans:
    objectives = fields.One2many('zm.strategic.objective', 'plan_id', string='战略目标')
    
  • zm.strategic.objective:
    plan_id = fields.Many2one('zm.strategic.plans', string='所属计划', required=True)
    strategies = fields.One2many('zm.strategic.strategy', 'objective_id', string='战略策略')
    
  • zm.strategic.strategy:
    objective_id = fields.Many2one('zm.strategic.objective', string='所属目标', required=True)
    

5. 生效配置

修改后清除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 20:02:37