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

Odoo 10迁移至Odoo15:filestore与ir_attachment访问异常求助

Odoo 10 迁移至 15:附件内容恢复方案

一、通过store_fname生成datas字段的可行方法

你可以直接从filestore读取文件内容,转为base64格式后填充到ir_attachment的datas字段中,具体步骤如下:

  1. 验证filestore完整性
    确认新环境的filestore/<数据库名>/目录已完整复制原环境文件,且ir_attachment记录中的store_fname字段值与filestore内的文件路径完全匹配。

  2. 使用Odoo Shell执行批量更新脚本
    打开终端进入Odoo安装目录,执行命令进入数据库shell:

    ./odoo-bin shell -d <你的数据库名称>
    

    然后运行以下Python代码:

    import base64
    import os
    from odoo import models
    
    # 筛选关联hr.inventario且未填充datas的附件
    attachments = env['ir.attachment'].search([
        ('res_model', '=', 'hr.inventario'),
        ('datas', '=', False)
    ])
    
    # 获取当前数据库的filestore绝对路径
    filestore_path = env['ir.attachment']._filestore()
    
    for att in attachments:
        if att.store_fname:
            file_full_path = os.path.join(filestore_path, att.store_fname)
            if os.path.exists(file_full_path):
                with open(file_full_path, 'rb') as file:
                    raw_content = file.read()
                    att.write({'datas': base64.b64encode(raw_content)})
            else:
                print(f"未找到文件: {file_full_path}")
        else:
            print(f"附件ID {att.id} 无store_fname值,跳过处理")
    

    执行完成后,符合条件的附件datas字段会被自动填充,即可正常访问PDF内容。

二、其他备选方案

  • 小数据量手动更新:如果附件数量少,可逐个打开ir_attachment记录,点击"上传文件"按钮,从filestore中找到对应文件重新上传(不推荐200条数据的场景)。
  • 校验导入数据准确性:确认ir_attachment的res_id、res_model字段与hr.inventario记录完全匹配,避免因关联错误导致无法加载附件。

三、CSV导出报错的解决

你遇到的"Unknown javascript error token <"错误,大概率是导出数据包含HTML特殊字符(如<、>)或数据量过大导致前端渲染异常,可尝试以下方法:

  • 缩小导出范围:仅筛选hr.inventario相关的ir_attachment记录导出,避免全量导出的性能问题。
  • 清理特殊字符:检查ir_attachment的name或其他文本字段,移除<、>等HTML标签或特殊字符后再导出。
  • 更换导出方式:使用后台"设置 -> 导出"功能,先导出为Excel格式再转存为CSV,绕过前端导出的JS限制。

注意:所有操作前请务必备份数据库,避免数据丢失或损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:27