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
相关产品推荐
相关产品推荐

