如何在不添加新树视图和菜单项的情况下从任何模型导出数据?如何显示任何模型的默认树视图?

How to export data from any model without adding a new tree view and menuitem? How to show the default tree view of any model?

通常情况下,如果您想使用 Odoo 界面将数据导出到 CSV,您需要执行以下步骤:

  1. 转到要导出一些数据的模型的 "tree"(或在新版本中称为 "list")视图
  2. Select一些记录将它们导出到csv文件
  3. 更多 > 导出
  4. Select 要导出的字段

就是这样。这对于已经具有可从菜单项访问的树视图的模型来说是可以的。但是如果你想从一个没有视图或菜单项的模型中导出数据来访问视图,你不能导出记录,除非你创建菜单项+动作+视图。

我知道即使表单不是手工创建的,也可以显示任何模型的树视图。如果不是由程序员创建,Odoo 会为任何模型创建一个默认表单。

那么,我的问题是:

恐怕唯一的方法是在 ir.model 表单视图中创建一个按钮,以显示该模型的树视图。还有其他想法吗?是否已经有方法或模块可以做到这一点?

我想知道 url 中是否有使用某些参数的技巧,地址使用菜单项 ID 和操作 ID:

http://localhost:8069/web?debug=#view_type=list&model=ir.ui.view&menu_id=41&action=25

而且我知道我可以在导出弹窗中导出一些模型浏览的相关数据,但是不能导出其他模型的所有记录,只能导出与当前模型相关的记录。

好吧,我没有找到任何快速技巧。但最好的方法是创建一个自定义模块,以便将按钮添加到 ir.model 表单和 return 默认树视图,如下所示:

@api.multi
def show_tree_view(self):
    self.ensure_one()
    return {
        'name': _("Export data"),
        'view_type': 'form',
        'view_mode': 'tree,form',
        'res_model': self.model,
        'view_id': False,
        'type': 'ir.actions.act_window',
        'context': self.env.context,
    }

就是这样,该按钮将显示任何树视图,用户可以在其中 select 要导出的记录 :)

视图代码为:

<record id="view_model_form_inherit" model="ir.ui.view">
    <field name="model">ir.model</field>
    <field name="inherit_id" ref="base.view_model_form" />
    <field name="arch" type="xml">
        <field name="name" position="before">
            <button type="object" name="show_tree_view" string="Show tree view" />
        </field>
    </field>
</record>