odoo把动作和菜单的定义都保存在数据库里。可以通过data数据文件添加。
动作可以通过以下几个方式触发:
1.点击菜单(菜单项需要关联某个动作)
2.点击页面里面的按钮(按钮需要关联某个动作)
3.作为上下文动作(contextual actions)里面的某个对象
现在来给已存在的classroom模块创建一个模型classroom.course:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class Course(models.Model):
_name = 'classroom.course'
# 界面 label 的值为 Title , required=True:必填字段
name = fields.Char(string='课程名', required=True)
description = fields.Text(string="课程描述")
然后在视图层文件views.xml里面写上动作、菜单:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- 创建动作 -->
<record model="ir.actions.act_window" id="course_list_action">
<field name="name">Courses</field>
<field name="res_model">classroom.course</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_cocontent_create"> Create the first course</p>
</field>
</record>
<!-- 顶级菜单 -->
<menuitem name="教室管理" id="main_classroom_menu"/>
<!-- 二级菜单 -->
<menuitem name="教室" id="classroom_menu" parent="main_classroom_menu"/>
<!-- 三级菜单
注意下面的 action="course_list_action" 这是引用了前面<record>定义好的动作
-->
<menuitem name="课程" id="courses_menu" parent="classroom_menu"
action="course_list_action"/>
</data>
</odoo>
由于odoo12的菜单不能直接显示,需要配置一下权限,编辑security目录下的 ir.model.access.csv :
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_classroom_classroom,classroom.course,model_classroom_course,,1,1,1,1
代码是上下对应的,分别有id、name等字段;后面的perm_read – perm_unlink分别是允许: 读,写,创建,修改
1 代表允许,0代表不允许
在配置完权限文件之后,还要修改_manifest_.py里面data的内容,把安全配置的注释去掉:
然后启动odoo服务,升级一下模块并刷新,就可以看到顶级菜单了:
点击’教室管理-教室’:
然后就可以进行CRUD操作了:
点击进去之后可以修改删除,这里我就不删除了。
再来看一下数据库:
至此,给模型新增菜单绑定动作并进行CRUD的功能就已经完成了。