由于需求要在模型(ticket.management)的动作按钮里面添加菜单,并打印当前的execl数据表
首先就是建立一个菜单
<act_window id="export_wizard_action"
name="导出Excel"
src_model="ticket.management"
res_model="ticket.wizard"
view_type="form" view_mode="form"
target="new"/>
在act_window里面,其中
- src_model 表示在哪个 model 上添加这个 act_window
- res_model 表示这个 act_window 将会跳转到哪一个 model
- view_type res_model 显示的视图类型
- view_mode res_model 显示的视图种类列表
- target 视图在当前视图(src_model) 上的打开方式。
1. 在当前视图上打开(current)
2.使用全屏模式(fullscreen)
3.使用弹出框(new)
4.用main代替current来清除导航
这是就是已经有了菜单,但是要直接点击菜单下载文件,要创建文件去存这个文件,以及进行进入操作。
下面就是创建模型(自定义)和写入数据的操作:
from odoo import fields, models, api
import base64
import xlwt
from io import BytesIO
class TicketWizard(models.Model):
_name = 'ticket.wizard'
file = fields.Binary('导出文件')
def generate_excel(self, product_ids):
"""
根据产品数据导出excel
:param product_ids: product.template()
:return:
"""
workbook = xlwt.Workbook(encoding='utf-8')
mf = xlwt.XFStyle() #处理时间格式
mf.num_format_str = 'yyyy/mm/dd'
worksheet = workbook.add_sheet('测试 ', cell_overwrite_ok=True)
# add header
header = ['名称', '价格', '总票数', '余票', '门票时间', '淡旺季', '售出', '实际进入']
for col in range(len(header)):
worksheet.write(0, col, header[col])
# add data
# product_ids = self.env['ticket.management'].search([]) #用于取的此模型的所有数据
for row in range(1, len(product_ids)+1):
product_id = product_ids[row-1]
worksheet.write(row, 0, product_id.name)
worksheet.write(row, 1, product_id.price)
worksheet.write(row, 2, product_id.total_number)
worksheet.write(row, 3, product_id.surplus)
worksheet.write(row, 4, product_id.ticket_date, mf)
worksheet.write(row, 5, product_id.price_id.name)
worksheet.write(row, 6, product_id.sold_out)
worksheet.write(row, 7, product_id.actual_entry)
# save
buffer = BytesIO()
workbook.save(buffer)
return base64.encodebytes(buffer.getvalue())
@api.multi
def action_export(self):
context = dict(self._context or {})
active_ids = context.get('active_ids', []) or []
product_tmpl_ids = self.env['ticket.management'].search([('id', 'in', active_ids)])
self.file = self.generate_excel(product_tmpl_ids)
value = dict(
type='ir.actions.act_url',
target='new',
url='/web/content?model=%s&id=%s&field=file&download=true&filename=product.xls' % (self._name, self.id),
)
return value
即可打印成功
-
未处理日期前
未处理日期前.png
-
处理日期后
处理日期后.png
网友评论