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

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查询中。

具体排查点及解决步骤

  1. 更新视图模型的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
        """
    
  2. 确保物理表已创建对应字段
    运行模块升级操作,让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;
    
  3. 清除缓存并重启服务
    升级完成后,清除Odoo服务器缓存,重启Odoo服务,确保新的视图定义被加载生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:22:39