Odoo 12-生成并下载CSV文件

时间:2019-12-18 11:03:30

标签: python-3.x odoo odoo-12

我在“制造”模块的“报告”选项卡中添加了一个菜单项。我已经编写了python代码来创建CSV文件。但是当我单击制造模块中的菜单项时,无法弄清楚如何使其可下载。 这是菜单项代码:

 <record model="ir.actions.server" id="raw_material_planning">
    <field name="name">Raw Material Planning</field>
    <field name="type">ir.actions.server</field>
    <field name="res_model">gear.manufacturing</field>
    <field name="model_id">342</field>
    <field name="state">code</field>
    <field name="code">
        action = model.raw_material_planning()
    </field>
  </record>

  <menuitem name="Raw Material Planning" parent="mrp.menu_mrp_reporting" id="menu_raw_material_planning"
      action="raw_material_planning"/>

此外,它应直接下载而不应转到任何窗口。

更新

已将字典保存为CSV文件

files = base64.b64encode(open('test.csv','rb').read())

attachment = self.env['ir.attachment'].create({
            'name': 'test.csv',
            'datas': files,
            'datas_fname': 'test.csv'
        })

return {
            'type': 'ir.actions.act_url',
            'url': '/web/content/%s?download=true' % (attachment.id),
            # 'target': 'new',
            'nodestroy': False,
        }

请帮助我

1 个答案:

答案 0 :(得分:1)

这里所有控制器都可用于下载内容或文件。

您需要返回任何控制器以及其文件内容,它将自动下载。

[
  '/web/content',
  '/web/content/<string:xmlid>',
  '/web/content/<string:xmlid>/<string:filename>',
  '/web/content/<int:id>',
  '/web/content/<int:id>/<string:filename>',
  '/web/content/<int:id>-<string:unique>',
  '/web/content/<int:id>-<string:unique>/<string:filename>',
  '/web/content/<string:model>/<int:id>/<string:field>',
  '/web/content/<string:model>/<int:id>/<string:field>/<string:filename>'
]

要下载任何文件,您需要为ir.attachment创建一个附件记录。

然后只需在函数中添加以下代码即可将文件返回到url。

attachment = self.env['ir.attachment'].search([('name', '=', 'import_product_sample')])
return {
    'type': 'ir.actions.act_url',
    'url': '/web/content/%s?download=true' % (attachment.id),
    'target': 'new',
    'nodestroy': False,
}

它将自动在浏览器中下载文件。