这里需要说明的是,在一般情况下,请不要改动官方代码,如果改动官方代码,后期升级很麻烦,而且可能会影响到别的项目,ODOO已经有各种模块使用,在尽可能的情况下请通过继承方式来处理涉及到官方模块部分。另外在此再次感谢职牛教育(QQ:123490142)、康虎课堂等鼎力协助,完成本书。(一)创建陪驾管理应用模块
odoo新建应用模块方式很多,我们使用自动创建方法,读者熟练后可自行手工添加应用模块。点击PyCharm下的Terminal窗口,输入以下命令。runtime\python3\python source\odoo-bin scaffold peijia myaddons
并按回车,开始创建peijia应用模块,绿色版需要指定执行文件路径,否则出错。稍等片刻,点击myaddons目录,可以见到通过scaffold命令生成了一个模块框架。简单讲一下生成的目录,peijia是模块主目录,一般基于该模块的所有文件都放在这个目录下面。controller:文件夹主要是一些HTTP请求相关的业务逻辑。models:是模型文件夹,业务的模型都放在这里。__manifest__.py:模块的描述文件,用来定义模块的基本信息,包含必要的模块信息。__init__.py 文件的作用是将文件夹变成一个Python模块,Python中每个模块的包中,都有__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。(二)修改陪驾管理应用模块
1.修改模块信息文件
我们修改一下生成的模块信息文件__manifest__.py。# -*- coding: utf-8 -*-{ 'name': "peijia", # 应用/模块名 # 对应用/模块的摘要 'summary': """ 陪驾管理软件 """, # 对应用/模块的描述 'description': """ 陪驾公司专用模块,全方位管理陪驾公司的业务 """, 'author': "Nebula", # 作者 'website': "http://www.yourcompany.com", # 作者网站 'category': '陪驾', # 种类 'version': '0.1', 'depends': ['base'], # 继承基础模块 # 将模块变成应用,可以在应用中搜索到 'application': True, 'sequence': 1, # 将应用/模块排在所有应用/模块第一位 # always loaded 'data': [ # 'security/ir.model.access.csv', 'views/views.xml', 'views/templates.xml', ], # only loaded in demonstration mode 'demo': [ 'demo/demo.xml', ],}
2.添加应用顶级菜单项
菜单项是使用XML文件中添加的视图组建,通过创建views/car_views.xml来定义菜单项。鼠标右键点击views,在弹出菜单上选择New,再选择File。在弹出对话框中录入car_views.xml文件名,点击OK按钮,在views目录下创建car_views.xml文件。点击car_views.xml 文件,为这个模型设置一个菜单入口,内容如下。<?xml version="1.0" encoding="utf-8"?><odoo> <!-- 顶级菜单 --> <menuitemid="menu_peijia_root"name="汽车陪驾"/></odoo>
id属性也称为XML ID,用于唯一标识每个数据元素,以供其它元素引用。在添加子菜单时,就需要引用顶级菜单的XML ID,即menu_peijia_root。此处添加的菜单项非常简单,仅用到了name属性。其他常用的属性这里没有使用,没有设置父菜单,因为这是一个顶级菜单。也没有设置action,因菜单项本身并不做任何事,仅仅用于放置后面要创建的子菜单项。我们还需要在__manifest__.py中使用data属性来添加安装或更新时需要加载的模块列表以进行声明。3.声明XML文件
修改__manifest__.py文件,在data段添加view声明,告知car_views.xml路径。'data': [ 'views/car_views.xml', ],
因为修改了py文件,所以需要重启项目,点击PyCharm上重启按钮,重启项目。在浏览器地址栏重新进入输入http://127.0.0.1:8069/,确保还是开发者模式,点击左侧应用菜单,再点击刷新本地模块列表,在弹出模块更新对话框上点击更新按钮,该操作在新建模块的时候使用。在应用筛选框输入peijia,即可过滤出peijia模块,点击安装,可安装该模块。再回到应用,陪驾模块显示已经已安装,点击展开菜单,我们可点击模块信息,了解模块在odoo中的信息。当我们对peiji应用模块的py文件做了修改后,需要点击升级菜单升级。因为菜单项还不包含可操作子菜单,所以不会显示,在添加好子菜单及合适的访问权限时即可显示。4.添加权限组
ODOO中使用组权限实现权限管理,组中再分配用户。ODOO通常有两个组,针对普通用户组的用户组和包含额外应用配置权限的管理员组。我们在创建一个全新的应用模块时,该应用模块需要对原有权限组添加访问权限,也可以针对该应用模块新定义一个用户安全组。首先确保__manifest__.py文件声明中有定义category键,本项目 ‘category’:’陪驾’。权限相关文件放在security子目录中,我们创建security/groups.xml文件来进行用户安全组定义。在security目录右键后点击new,再点击File,在填出的对话框输入groups.xml,然后按Enter回车确认。<?xml version="1.0" encoding="utf-8" ?><odoo> <!-- 为陪驾模块创建一个全新权限类别 module_peijia_category --> <recordid = "module_peijia_category"model = "ir.module.category"> <fieldname="name">陪驾</field> </record> <!-- 在权限类别中创建group_peijia_user权限组 --> <recordid="group_peijia_user"model="res.groups"> <fieldname="name">User</field> <!-- 指定权限属于陪驾模块 --> <fieldname="category_id" ref="module_peijia_category"/> <!-- <implied_ids>则是需要继承的群组-基础用户组,意思是加入该群组则默认加入继承的群组 --> <fieldname="implied_ids" eval="[(4, ref('base.group_user'))]" /> </record> <!-- 在权限类别中创建group_peijia_manager权限组 --> <recordid="group_peijia_manager"model="res.groups"> <fieldname="name">Manager</field> <!-- 指定权限属于陪驾模块 --> <fieldname="category_id" ref="module_peijia_category"/> <!-- <implied_ids>则是需要继承的群组-基础用户组和group_peijia_user组, 意思是加入该群组则默认加入继承的群组 --> <fieldname="implied_ids" eval="[(4, ref('base.group_user')), (4, ref('group_peijia_user'))]" /> <!-- user指定了组里面的用户,这里表示把admin用户添加到该组--> <fieldname="users" eval="[(4, ref('base.user_admin')), ]" /> </record></odoo>
<odoo></odoo>成对出现,这个是odoo要求的格式,odoo会自动处理里面的内容。模块分类(ir.module.category)和「用户」及「管理员」两个用户组(res.groups),重点来看看用户组里各个字段所代表的含义:implied_ids:在当前用户组下的用户,同时加入该字段所指定的用户组中users:该字段所指定的用户默认被加入到当前用户组中两个引用(ref),分别是base.group_user 基础用户组和 base.user_root 管理员账户eval 解析::(4,ID)添加主从链接关系到id=ID的对象权限相关文件放在security子目录中,我们创建security/peijia_security.xml文件来进行权限定义。我们在__manifest__.py文件的data段添加引用。'data': [ 'views/car_views.xml', # 必须放在所有菜单后面,否则出错 'security/groups.xml', # 权限组设置,这里添加],
保存完毕,点击模块升级,这些权限组就可以在设置->用户->群组里面看到了。