Alan Hou的个人博客

从0开始创建一个Odoo插件模块

这是Odoo系列文章的第四篇,完整目录请见最好用的免费ERP系统Odoo 11开发指南
 插件(addon)和插件模块(addon module)用于指代可在Odoo中安装的Python包,在用户端显示为应用app或模块module
本文中我们将通过创建一个名为my_module的插件来认识插件创建的全过程:
我们依然使用10分钟带你搭建史上最强的ERP系统-Odoo最新版中所创建的环境,即在~/odoo-dev下进行操作

打开开发者模式,并更新插件列表,此时在Apps中便可搜索到我们刚刚新建的my_module:

注:在my_module目录下添加static/description/icon.png则可显示图标,如上图中的循环箭头

__manifest__.py中的常见配置项

除了可使用长描述外,还能使用README文件来进行描述,扩展名可以为.txt, .rst或.md,另外还可以在插件根目录下添加description/index.html,一旦添加了HTML文件,其它描述文件将会被覆盖。

__manifest__.py中除了以上列出的之外,还有一些常用的键名:

application: 若值为True,则模块将以应用的方式显示

auto_install: 若值为True,则表示这是一个“胶水”(glue)模块,在它的依赖都安装后会自动安装

installable: 默认值为True,表示模块允许被安装

插件的基本结构

插件中的主要目录:

models/包含后端代码文件,创建模型及其业务逻辑。推荐一个Model使用一个文件,并且与model同名,library.book这一model使用library_book.py,第五章将详细介绍应用模型

views/包含用户端用到的XML文件,如actions, forms, lists等等。同样推荐一个模型一个文件,网站模板通常添加_template后缀,第十章会介绍后台视图,十六章讲解CMS网站开发

data/包含模块初始数据及其它数据,在第七章中将会介绍模块数据

demo/包含带有演示数据的数据文件,可用于测试、培训或模块评估

i18n/是Odoo查找.pot和.po翻译文件的地方,这些文件无需在__manifest__.py中进行声明,第十二章会介绍多语言相关内容

security/包含定义访问权限列表的数据文件,通常是一个ir.model.access.csv文件,也可能是一个定义访问组或行级安全记录规则的XML文件,在第11章中将会详细介绍访问权限控制

controllers/包含网站控制器及提供同等功能的模块的代码文件,第十四章将会介绍Web服务器开发的内容

static/是放置网页文件的地方,和前述不同,这个目录不是一种惯例,而是仅有其下的文件才能在Odoo网页中使用。同样无需在__manifest__.py中指定,但需要在网页模板中进行引用,第十六章将会介绍CMS网站开发的内容

注意:在向插件中新增文件时,数据文件需在__manifest__.py中声明,代码文件需在__init__.py中声明,否则将不会被载入

下面以一个简单的图书案例来学习具体内容的填充(操作路径~/odoo-dev/local-addons/my_module)

本例中未包含业务逻辑,在第六章中将进行深入的探讨,安装后可以在Settings(开发者模式)下找到相应的记录

添加菜单和视图

此时更新该插件时菜单栏中就会出现Library



Form视图通过<form>定义,画布是一个两列网格,其中的<group>用于垂直方向,两个group会有两列带有<field>定义的字段,字段采用数据类型默认的显示,也可以使用widget属性来进行具体指定。

Tree视图通过<tree>标签内部加上<field>来进行列的显示。

Search视图用于扩展右上角搜索选项框,在顶级的<search>标签中可包含<field>和<filter>,field增加可用于搜索的字段,filter增加预设的过滤条件。

权限控制

在新建数据模型时,需要指定谁能进行增删改查的操作,在创建新的应用时,则可定义用户组。

我们继续使用my_module来进行学习,权限控制的效果为:所有人均可阅读图书记录,新建一个Librarian组来进行增删改查的操作。

可通过Settings > Users & Companies > Groups查看所创建组

通过Settings > Users & Companies > Users 打开任意用户即可通过编辑勾选为该用户赋予 Librarians 的权限:

 

使用脚手架快速创建插件结构

基本目录结构见本文插件的基本结构部分

本节参考代码

退出移动版