首页 > 解决方案 > 如何存储在 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)

标签: pythonexcelodoo

解决方案


推荐阅读