python - 如何存储在 ir.attachment 表中
问题描述
我想用我的附件文件发送电子邮件,但我不想在我的路径中创建 excel 文件。不创建文件,我想将导出文件添加到 ir.attachment 表。我该怎么做?检查我的代码。我创建文件并存储在 ir.attachment 中。现在我不想创建文件。
from odoo import models, fields, api
from io import StringIO
import base64
class automation_mail_send(models.Model):
_inherit = 'stock.quant'
def schedule_mail_send(self):
own_id=[]
owner=self.env['stock.quant'].search([])
for i in owner.owner_id:
if i not in own_id:
owner_id.append(i)
for owner in own_id:
own = self.env['stock.quant'].search(['owner_id',"=",owner])
if own:
template_id = self.env.ref('automation_mail_send.mail_template_inventory_confirmation').id
template = self.env['mail.template'].browse(template_id)
template.write({'email_to': own.owner_id.email})
workbook = xlsxwriter.Workbook('stock.xlsx')
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': True})
sheet.write(0, 0, 'Product Name', bold)
sheet.write(0, 1, 'Locaton', bold)
sheet.write(0, 2, 'Lot/Serial Number', bold)
sheet.write(0, 3, 'Quantity On Hand', bold)
sheet.write(0, 4, 'Incoming Date', bold)
prod_row = 1
prod_col = 0
attachment_data={}
for o in own:
worksheet.write(prod_row, prod_col,o.product_id.name_)
worksheet.write(prod_row, prod_col,o.location_id.name_)
worksheet.write(prod_row, prod_col,o.lot_id.name_)
worksheet.write(prod_row, prod_col,o.quantity)
worksheet.write(prod_row, prod_col,o.in_date)
prod_row = prod_row + 1
fp = StringIO()
workbook.save(fp)
fp.seek(0)
datas = base64.encodestring(fp.read())
file_name = "name_%s" %(time.strftime('%Y%m%d%H%M%S.xlsx'))
attachment=[]
attachment_data = {
'name':file_name,
'datas_fname':file_name,
'datas':datas,
'res_model':"stock_quant",
}
attachment.append(self.env['ir.attachment'].create(attachment_data).id)
template.write({'attachment_ids': [(6, 0, attachment)]})
template.send_mail(self.id,force_send=True)
解决方案
推荐阅读
- excel - Excel 在线:带有结构化表引用的公式因 #REF 失败!使用 insertWorksheetsFromBase64 导入工作表时出错
- windows - 批处理:ECHO 输出汉字而不是数字
- angular - 什么是内容(参考)内容:TemplateRef
在角度? - python - 如何读取 hdf5 文件。并将它们绘制为图像
- c# - 如何添加具有主键的同一项目的多个日期
- c++ - 链表数组中的分段错误
- java - 默认接口方法中返回泛型类
- package - lmfit 包在使用 Anaconda Python 3.7 的 Windows 10 中发生冲突
- google-sheets - 当我们使用 QUERY(IMPORTRANGE?
- amazon-web-services - [AWS} - 在本地调试步进函数的一个或多个 lambda 部分