通过代码创建action和菜单的例子,在编写一些动态功能时可以参考:
@api.model
def create(self, vals):
rec = super(MyBoard, self).create(vals)
if 'top_menu_id' in vals and 'menu_name' in vals:
action_id = {
'name': vals['menu_name'] + " Action", # action名称
'res_model': 'myboard.board', # 引用的model
'tag': 'myboard',
'params': {'board_id': rec.id}, # 其他参数
}
# 创建action
rec.board_action_id = self.env['ir.actions.client'].sudo().create(action_id)
# 创建菜单
rec.board_menu_id = self.env['ir.ui.menu'].sudo().create({
'name': vals['menu_name'], # 菜单名
'active': vals.get('active', True), # 菜单有效状态
'parent_id': vals['top_menu_id'], # 上级菜单ID
'action': "ir.actions.client," + str(rec.board_action_id.id), # 菜单对应的action
'groups_id': vals.get('group_access', False), # 访问组
'sequence': vals.get('menu_sequence', 10) # 菜单序号
})
return rec