当前位置: 首页 > news >正文

odoorpc下载附件

import odoorpc
import base64
import os
from datetime import datetimeclass OdooAttachmentDownloader:def __init__(self, host, port, database, username, password):self.host = hostself.port = portself.database = databaseself.username = usernameself.password = passwordself.odoo = Nonedef connect(self):"""连接到Odoo服务器"""try:self.odoo = odoorpc.ODOO(self.host, port=self.port)self.odoo.login(self.database, self.username, self.password)print("成功连接到Odoo服务器")return Trueexcept Exception as e:print(f"连接失败: {e}")return Falsedef download_attachments_by_record(self, model_name, record_id, save_dir="./attachments"):"""下载指定单据的所有附件Args:model_name: 模型名称,如 'sale.order', 'account.move'record_id: 记录IDsave_dir: 保存目录"""if not self.odoo:print("请先连接到Odoo服务器")return []os.makedirs(save_dir, exist_ok=True)try:Attachment = self.odoo.env['ir.attachment']attachment_ids = Attachment.search([('res_model', '=', model_name),('res_id', '=', record_id)])if not attachment_ids:print(f"未找到模型 {model_name} 记录 {record_id} 的附件")return []attachments = Attachment.read(attachment_ids, ['name', 'datas', 'mimetype', 'create_date'])downloaded_files = []for attachment in attachments:if attachment.get('datas'):file_data = base64.b64decode(attachment['datas'])file_name = attachment['name']save_path = os.path.join(save_dir, file_name)counter = 1while os.path.exists(save_path):name, ext = os.path.splitext(file_name)save_path = os.path.join(save_dir, f"{name}_{counter}{ext}")counter += 1with open(save_path, 'wb') as f:f.write(file_data)file_info = {'file_path': save_path,'file_name': os.path.basename(save_path),'original_name': file_name,'mime_type': attachment.get('mimetype', ''),'create_date': attachment.get('create_date', ''),'size': len(file_data)}downloaded_files.append(file_info)print(f"✓ 已下载: {file_info['file_name']} ({file_info['size']} bytes)")else:print(f"⚠ 附件 {attachment['name']} 无数据内容")print(f"\n总共下载了 {len(downloaded_files)} 个文件到目录: {save_dir}")return downloaded_filesexcept Exception as e:print(f"下载附件时出错: {e}")return []def main():downloader = OdooAttachmentDownloader(host='10.86.113.88',port=8069,database='odoo17',username='admin',password='123123sdt')if downloader.connect():files = downloader.download_attachments_by_record(model_name='cbd.huohao.price.form.head',record_id=659,save_dir='./downloaded_attachments')for file in files:print(f"文件: {file['file_name']}, 大小: {file['size']} bytes")if __name__ == "__main__":main()

  

http://www.gsyq.cn/news/62546.html

相关文章:

  • 2025年评价高的大跨距电缆桥架/槽式电缆桥架厂家最新推荐排行榜
  • 2025年苹果售后维修网点查询指南:专业连锁与官方渠道全解析
  • 2025武汉文化课集训学校权威推荐榜单:合规办学与提分实效双标杆
  • 2025 年元宵馅厂家最新推荐榜,技术创新与品质口碑深度解析,甄选安全健康优质品牌清真风味元宵馅/传统手工元宵馅/低糖元宵馅/古早味元宵馅/钙奶元宵馅公司推荐
  • 2025年口碑好的160℃脱硝催化剂行业内口碑厂家排行榜
  • 【Nordic随笔】蓝牙6.2核心规范概述
  • 2025年知名的超临界CO₂萃取热门厂家推荐榜单
  • NBA 常规赛核心竞争力升级与实战效能深化:球队竞技潜力释放
  • 2025年评价高的风管防火阀厂家推荐及选购参考榜
  • 2025年中国水处理与防火材料公司推荐:德美化工水处理药剂公
  • 2025年深圳亚马逊UL报告公司权威推荐榜单:ISO体系认证‌/中国SRRC认证‌/IP65防尘防水测试源头公司家精选
  • 【转载】Visual Studio 添加 QT 模块
  • NBA 常规赛核心能力进阶与实战品质优化:球队竞技潜力深化
  • 2025智算云厂商权威推荐榜单:全栈能力与普惠生态双轮驱动
  • 未来之窗昭和仙君(四十八)开发商品进销存修仙版——东方仙盟筑基期 - 详解
  • NBA 常规赛核心价值深化与实战能力升级:球队竞技水平进阶
  • 2025年口碑好的不锈钢定风量变风量阀厂家最新热销排行
  • 2025年知名的堆高电动叉车厂家最新热销排行
  • NBA 常规赛实战效能深化与核心价值升级:球队竞技品质夯实
  • 2025年比较好的恩施装修全包/恩施装修专业设计榜
  • 管理者一天的工作布局
  • 2025年质量好的共轭型静电纺丝设备厂家最新热销排行
  • 2025年想省钱又健康?这几种高性价比液体代餐品牌别错过!
  • 2025年靠谱的光伏组件清洗车/无人驾驶式光伏清洗车实力厂家TOP推荐榜
  • 实测深圳热门长租公寓:2025 租房认准 “区位 + 智能 + 服务”,魔方公寓
  • 营养师力荐!2025年适合晚餐的代餐品牌,减脂不亏营养
  • Vibe Coding 的爱与恨:AI 开发流程设计和工程哲学丨开发者工具专场@RTE2025 回顾
  • 2025精选化妆品添加尼龙粉厂家
  • 习题解析之:动物重量排序
  • 2025年11月反应釜设备供应商综合评估与选购指南