在odoo 8中单击菜单按钮后显示现有ID的表单视图?

时间:2017-01-13 11:22:15

标签: highcharts openerp odoo-8

显示记录数据的“正常方式”是:单击菜单按钮,在树视图中选择一条记录,您可以看到该特定记录的表单视图。

由于我只有一条记录包含一些Highcharts图,我想跳过树视图,点击菜单按钮后想看到那条记录的表格视图,意思是图形。

我尝试仅定义表单视图而没有树视图,但这只是在单击菜单按钮时打开一条新记录而不是现有记录。我也搜索了这个问题,但找不到任何有用的东西。

所以非常欢迎任何帮助。也许甚至还有其他方法可以在不使用表单视图的情况下显示数据/图表。

到目前为止,这是代码:

menu.xml文件

<record model="ir.actions.act_window" id="statistics_action">
    <field name="name">Total Data</field>
    <field name="res_model">reminders.statistics</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="domain">[('id', '=', 1)]</field>
</record>

<menuitem id="statistics_group" name="Statistics" parent="reminder.main_reminder_menu"/>
<menuitem id="total_data_menu" name="My Graph" parent="reminder.statistics_group" action="statistics_action"/>

statistics_view.xml (我希望避免/跳过树视图)

<record model="ir.ui.view" id="statistics_tree_view">
    <field name="name">reminder_statistics.tree</field>
    <field name="model">reminders.statistics</field>
    <field name="arch" type="xml">
        <tree edit="false" create="false" delete="false">
            <field name="id"/>
        </tree>
    </field>
</record>

<record model="ir.ui.view" id="statistics_form_view">
  <field name="name">reminder_statistics.form</field>
  <field name="model">reminders.statistics</field>
  <field name="arch" type="xml">
      <form edit="true" create="false" delete="false">
          <group string="Title of some Graph">
              <field name="some_graph" widget="charts_widget" nolabel="1" chart-type="stacked"/>
          </group>
      </form>
  </field>
</record>

每天都有一个运行执行此方法的cron作业来获取图形数据:

reminder_statistics.py

class Stats(models.Model):
    _name = 'reminders.statistics'

    some_graph = fields.Text()

    @api.one
    def collect_stats_data(self):
        data = some dictionary (may change every day)

        graph_data = {
            "title": {
                "text": ""
            },
            "xAxis": {
                "categories": [key for (key, value) in data.items()]
            },
            "yAxis": {
                "title": {
                    "text": "Total Count"
                }
            },
            "series": [{
                "type": "column",
                "name": "Total Count",
                "data": [value for (key, value) in data.items()],
                "dataLabels": {
                    "enabled": True,
                }
            },
            ],
            "tooltip": {
                "enabled": False
            }
        }

        self.some_graph = json.dumps(graph_data)

1 个答案:

答案 0 :(得分:0)

您可以通过为window action设置res_id字段来传递要使用操作打开的记录ID。但是,如果记录不存在,这种方法很脆弱。

更好的方法是在模块安装时创建初始记录,然后使用记录的XML ID将该记录的ID传递给窗口操作,例如

<强> data.xml中

<data noupdate="1">
    <record model="reminders.statistics" id="my_unique_record">
        <field name="some_graph">{}</field>
    </record>
</data>

<强> menu.xml文件

<record model="ir.actions.act_window" id="statistics_ref_action">
    <field name="name">Total Data (With XML ID)</field>
    <field name="res_model">reminders.statistics</field>
    <field name="view_type">form</field>
    <field name="view_mode">form,tree</field>
    <field name="res_id" ref="reminder.my_unique_record"/>
</record>

<menuitem id="total_data_menu_with_xml_id" name="My Graph (Using XML ID)"
          parent="reminder.statistics_group" action="statistics_ref_action"/>

更动态的方法是使用server action并在其中搜索某些现有记录(例如,最新记录)并返回显示找到记录的窗口操作:

<强> menu.xml文件

<record model="ir.actions.server" id="statistics_server_action">
    <field name="name">Statistics Server Action</field>
    <field name="model_id" ref="model_reminders_statistics"/>
    <field name="state">code</field>
    <field name="code">
ids = self.search(cr, user.id, [], order='create_date desc', limit=1, context=context)
action = {
    "name": "Total Data (From Server Action)",
    "type": "ir.actions.act_window",
    "view_type": "form",
    "view_mode": "form,tree",
    "res_model": self._name,
    "res_id": ids and ids[0] or None,
}
    </field>
</record>

<menuitem id="total_data_menu_server_action" name="My Graph (Using a Server Action)"
          parent="reminder.statistics_group" action="statistics_server_action"/>