odoo11 在tree视图的“动作”添加一个选项

问题描述

我在odoo中打算自定义excel下载,但只能在form试图下添加“导出excle”选项成功,tree视图没有这个选项
form视图

图片描述

tree视图

图片描述

代码:

view.xml

<act_window id="action_export_wizard"
            name="導出Excel"
            src_model="split.accountant.total"
            res_model="export.wizard"
            view_type="tree" view_mode="form"
            target="new"/>

<record id="wizard_view" model="ir.ui.view">
    <field name="name">export wizard</field>
    <field name="model">export.wizard</field>
    <field name="arch" type="xml">
        <form string="導出記錄">
            <footer>
                <button string="下載" class="btn-primary" name="action_export" type="object"/>
                <button string="關閉" class="btn-default" special="cancel" />
            </footer>
        </form>
    </field>
</record>

model.py

class ExportWizard(models.Model):
    _name = 'export.wizard'

    file = fields.Binary('導出文件')

    def generate_excel(self, product_ids):
        """
        根据产品数据导出excel
        """
        workbook = xlwt.Workbook(encoding='utf-8')
        worksheet = workbook.add_sheet('会计总账')

        # add header
        header = ['公司', '账目笔数', '总账']
        for col in range(len(header)):
            worksheet.write(0, col, header[col])

        # add data
        for row in range(1, len(product_ids)+1):
            product_id = product_ids[row-1]
            worksheet.write(row, 0, product_id.company_name)
            worksheet.write(row, 1, product_id.accountant_num)
            worksheet.write(row, 2, product_id.accountant_total)

        # save
        buffer = BytesIO()
        workbook.save(buffer)
        return base64.encodebytes(buffer.getvalue())

    @api.multi
    def action_export(self):
        context = dict(self._context or {})
        print("context=",context)
        active_ids = context.get('active_ids', []) or []
        print("active_ids=", active_ids)
        product_tmpl_ids = self.env['split.accountant.total'].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=accountant.xls' % (self._name, self.id),
        )
        return value
阅读 3.9k
2 个回答
新手上路,请多包涵

你是不是在act_window设置了multi="True"

act_window 加个属性 key2="client_action_multi"试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题