Odoo 14中hr.employee.public添加Binary字段报错求助
Odoo 14 hr.employee.public 添加Binary字段报错的原因及解决方法
核心原因
hr.employee.public 是视图模型(_auto=False),它基于数据库视图而非物理表运行,添加字段时和普通模型有本质区别:
- 普通模型添加
store=True字段时,Odoo会自动创建物理表字段并同步数据;但视图模型的查询依赖预定义的_sql_query,如果没把新字段加入查询语句,就会出现"列不存在"的报错。 - 当Binary字段设置
attachment=True时,Odoo会自动生成对应的文件名字段(比如employee_file_name_signature),这个字段同样需要加入视图的SQL查询中。
具体排查点及解决步骤
更新视图模型的SQL查询语句
在你的模块中找到hr.employee.public的定义,修改_sql_query,把新增的字段以及自动生成的文件名字段加入SELECT列表:class HrEmployeePublic(models.Model): _name = 'hr.employee.public' _inherit = 'hr.employee' _auto = False _sql_query = """ SELECT emp.id, emp.name, emp.priv_email, -- 保留原有其他字段 emp.employee_signature, -- 新增Binary字段 emp.employee_file_name_signature -- 新增自动生成的文件名字段 FROM hr_employee emp WHERE emp.active = TRUE """确保物理表已创建对应字段
运行模块升级操作,让Odoo在hr_employee物理表中创建employee_signature和employee_file_name_signature字段。如果升级后数据库中仍无这些字段,可应急手动执行SQL(优先通过Odoo升级):ALTER TABLE hr_employee ADD COLUMN employee_signature bytea; ALTER TABLE hr_employee ADD COLUMN employee_file_name_signature varchar;清除缓存并重启服务
升级完成后,清除Odoo服务器缓存,重启Odoo服务,确保新的视图定义被加载生效。
内容的提问来源于stack exchange,提问作者oigna
相关产品推荐
相关产品推荐

