当前位置:首页>python>中篇Python(ODOO)篇 第三章 ODOO项目开发

中篇Python(ODOO)篇 第三章 ODOO项目开发

  • 2026-09-02 19:04:17
中篇Python(ODOO)篇 第三章 ODOO项目开发
这里需要说明的是,在一般情况下,请不要改动官方代码,如果改动官方代码,后期升级很麻烦,而且可能会影响到别的项目,ODOO已经有各种模块使用,在尽可能的情况下请通过继承方式来处理涉及到官方模块部分。
另外在此再次感谢职牛教育(QQ:123490142)、康虎课堂等鼎力协助,完成本书。

(一)创建陪驾管理应用模块

odoo新建应用模块方式很多,我们使用自动创建方法,读者熟练后可自行手工添加应用模块。
点击PyCharm下的Terminal窗口,输入以下命令。
runtime\python3\python source\odoo-bin scaffold peijia myaddons
并按回车,开始创建peijia应用模块,绿色版需要指定执行文件路径,否则出错。
稍等片刻,点击myaddons目录,可以见到通过scaffold命令生成了一个模块框架。
我们展开目录树。
简单讲一下生成的目录,peijia是模块主目录,一般基于该模块的所有文件都放在这个目录下面。
controller:文件夹主要是一些HTTP请求相关的业务逻辑。
models:是模型文件夹,业务的模型都放在这里。
security:权限相关的文件。
views:视图文件夹,页面布局的文件。
__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',    ],}
demo段数据,只有在载入演示数据的时候才有效。

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。
sequence:排序,值为数据0最大。
parnet:指定父节点菜单。
action:指定窗体事件。
groups:绑定权限组
name:菜单名称
此处添加的菜单项非常简单,仅用到了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回车确认。
在groups.xml文件输入以下内容:
<?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),重点来看看用户组里各个字段所代表的含义:
category_id:该用户组所属的模块分类
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',  # 权限组设置,这里添加],
保存完毕,点击模块升级,这些权限组就可以在设置->用户->群组里面看到了。

最新文章

随机文章