Odoo 8使用新API继承旧API模型出现异常问题
问题分析与解决方案
这个问题的核心原因大概率是新API中字段类型定义不匹配,再加上可能的缓存/模块升级不彻底的问题,咱们一步步拆解:
1. 字段类型的关键差异
你看你在新API里的sector字段定义是:
sector = fields.Char(related="partner_id.sector", string="Sector")
但旧API里明确把它定义为many2one类型:
'sector': fields.related('partner_id', 'sector', type='many2one', relation='sector', string='Sector')
显然partner_id.sector是一个关联到sector模型的many2one字段,你在新API里用Char类型去关联,这会导致字段无法正确读取关联值——Odoo尝试把一个many2one对象转换成字符串,大概率会失败,进而影响整个视图的数据加载逻辑,导致修改line_ids后没有数据显示。
2. 修正后的新API代码
把sector字段的类型改成Many2one,保持和原字段类型一致:
from odoo import models, fields class StockPicking(models.Model): _inherit = "stock.picking" address = fields.Char(related='partner_id.street', string="Address") sector = fields.Many2one(related='partner_id.sector', comodel_name='sector', string="Sector")
(comodel_name可以省略,Odoo会自动从关联路径推断,但显式指定能避免潜在的类型推断错误)
3. 额外需要检查的点
- 模块升级与缓存清除:修改新API代码后,一定要彻底升级模块,重启Odoo服务,清除浏览器缓存。新API的字段元数据缓存机制和旧API不同,如果没有完全刷新,视图可能还是读取旧的字段定义。
- 视图字段兼容性:确保tree视图里的
sector字段能正确渲染many2one类型——Odoo的tree视图默认支持many2one字段的显示,不需要额外修改视图代码。
为什么旧API能正常工作?
旧API的fields.related会根据type参数自动处理关联字段的类型转换,即使你在视图里引用,它也能正确映射到对应的字段类型;而新API的字段类型是强约束的,类型不匹配会直接导致字段数据读取失败,进而影响整个视图的数据加载。
内容的提问来源于stack exchange,提问作者Kenly
相关产品推荐
相关产品推荐

