显示记录数据的“正常方式”是:单击菜单按钮,在树视图中选择一条记录,您可以看到该特定记录的表单视图。
由于我只有一条记录包含一些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)
答案 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"/>