ODOO12图书项目创建新的插件模块

概览图书项目
为更好地在本文中探讨,我们将使用一个现实中可以使用的学习项目。一起来创建一个管理图书库的 Odoo 应用。该项目将在后续文章中持续使用,每篇文章都会进行一次迭代,为应用添加新的功能。本文中将创建图书应用的第一个版本,第一个功能是实现图书目录。
图书将包含如下数据:

  • 标题
  • 作者
  • 出版社
  • 发行日期
  • 封面图
  • ISBN:包含检查 ISBN是否有效的功能
  • 有效性标记;标识图书是否已对公众发布

图书目录可由图书管理员编辑,对图书操作者则仅有可读权限。该目录可通过公共网页访问,仅显示已发布图书。就是这样一个简单的项目,但提供有用的功能,足以让我们了解 Odoo 应用的主要构件。
ODOO12图书项目创建新的插件模块
一个插件模块是包含实现一些 Odoo 功能的文件夹,可以添加新功能或修改已有的功能。插件目录必须含有一个声明或描述文件__manifest__.py,以及其它模块文件。
一部分模块插件在 Odoo 中以app的形式出现,通常都会带有顶级菜单项。它们为 CRM 或 HR 这样的功能区添加核心元素,因此在 Odoo 应用菜单中会高亮显示。另外还有一些非应用模块插件一般为这些应用添加功能。如果你的模块为 Odoo 添加新的或重要的功能,一般应该是app。而如果模块仅修改应用的功能,那么就是一个普通的插件模块。
要创建新模块,需要:

  1. 确保操作的目录是 Odoo 的 addons 路径
  2. 创建模块目录,并包含声明文件
  3. 可选择为模块添加一个图标
  4. 如打算对外发布,为模块选择一个证书

然后我们就可以安装模块了,确定模块在 Odoo 服务中可见并正确安装它。
准备 addons 路径
一个插件模块是一个含有 Odoo 声明文件的目录,它创建一个新应用或为已有应用添加功能。addons模块的路径是一系列目录,Odoo 服务可以在这里查找插件。默认addons包含odoo/addons 中存放的 Odoo 自带的官方应用,以及在odoo/odoo/addons目录中提供核心功能的 base 模块。
我们应将自己创建的或应用市场及其它地方下载的模块放到指定的目录中。要使得 Odoo 服务能够找到这些应用,需要这些目录添加到 Odoo 的 addons 路径中。
根据我们前面所创建的项目,Odoo 的代码存放在/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/目录下。最佳实践告诉我们应在自有目录下添加代码,而不应与 Odoo 源代码混在一起。所以要添加自定义模块,
1、在 Odoo 同级创建目录community_odoo

mkdir -p /home/tderp/.conda/envs/odoo12/odoo-dev/community_odoo/

2、我们需要让 Odoo 实例能识别新模块。
创建模块目录和声明文件
Odoo 自带一个scaffold命令可自动创建新模块目录,其中会包含基础结构。此处并不会使用该命令,而是手动创建。通过以下命令可以了解scaffold用法:

/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/odoo-bin  scaffold --help 

在这里插入图片描述
Odoo 模块目录需包含一个__manifest__.py描述性文件,同时还需要是可导入的包,所以还应包含__init__.py文件。
模块目录名是其技术名称,我们使用library_app,技术名称应是有效 Python 标识符,即以字母开头且仅能包含字母、数字和下划线。执行如下步骤来初始化新模块:
(1)通过命令行,我们可以添加一个空的__init__.py 文件来初始化模块:

  cd  /home/tderp/.conda/envs/odoo12/odoo-dev/community_odoo/
mkdir  library_app  
  touch /home/tderp/.conda/envs/odoo12/odoo-dev/community_odoo/library_app/__init__.py

(2)下面添加声明文件,其中应包含一个 Python 字典,有几十个可用属性。其中仅 name属性为必填,但推荐同时添加 description 和 author 属性。
在__init__.py 同级创建__manifest__.py 文件,

 touch /home/tderp/.conda/envs/odoo12/odoo-dev/community_odoo/library_app/__manifest__.py

添加以下内容:

{
'name': 'Library Management',
'description': 'Manage library book catalogue and lending.',
'author': 'Daniel Reis',
'depends': ['base'],
'application': True,
}

depends 属性可以是一个包含所用到的模块列表。Odoo 会在模块安装时自动安装这些模块,这不是强制属性,但建议使用。如果没有特别的依赖,可以添加内核 base 模块。应注意将所有依赖都在此处列明,否则,模块会因缺少依赖而报错或出现加载错误(如果碰巧依赖模块在随后被加载了)。
我们的应用无需依赖其它模块,所以本处使用了 base。为保持简洁,这里仅使用了几个基本描述符键:

  • name:插件模块标题字符串
  • description:功能描述长文件,通常为RST格式
  • author:作者姓名,本处为一个字符串,可以是逗号分隔的一系列姓名
  • depends:一个依赖插件模块列表,在模块安装时会先安装这些插件
  • application:一个布尔型标记,代表模块是否在应用列表中以 app 展现
    description可由模块顶层目录中的README.rst或README.md代替,如果两者都不存在,将使用声明文件中的description。
    在真实场景中,建议也同时使用其它属性名,因它们与 Odoo 的应用商店有关:
  • summary:显示为模块副标题的字符串
  • version:默认为1.0,应遵守版本号规则。建议在模块版本号前加上 Odoo 版 本,如12.0.1.0
  • license:默认为LGPL-3
  • website:了解模块更多信息的 URL,可以帮助人们查看更多文档或提供文件 bug 和建议的跟踪
  • category:带有模块功能性分类字符串,缺省为Uncategorized。已有分类可通过安全组表单(位于设置>管理中心>群组)的应用字段下拉列表查看(需开启调试模式)

还有以下描述符键:

  • installable:默认为 True,但可以通过设置为 False 来禁用模块
  • auto_install:若设置为 True,在其依赖已安装时会自动安装,用于胶水模块,用于同一实例上两个模块安装后功能的连接。

3、添加该目录至 addons 路径,执行如下命令

/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/odoo-bin --addons-path="/home/tderp/.conda/envs/odoo12/odoo-dev/community_odoo,/home/tderp/.conda/envs/odoo12/odoo-dev/enterprise_odoo,/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/addons"  --save

#为了不受干扰,这里参数中使用绝对路径,多个路径用逗号隔开
–save 参数将选项保存至配置文件中,这样我们就无需在每次启动服务时输入参数,只需运行/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/odoo-bin即可使用上次使用的参数。可以通过-c 参数指定文件来使用或保存配置项。仔细查看输出的日志,可以看到INFO ? odoo: addons paths:[…] 一行中包含community_odoo目录。
添加图标
模块可选择添加图标,这对于作为 app 的模块尤其重要,因为在应用菜单中一般都应有图标。要添加图标,需要在模块中添加static/description/icon.png文件。
为简化操作,我们可以复用 accounting 应用的图标,把odoo/addons/account/static/description/icon.png文件拷贝至community_odoo/library_app/static/description目录。可通过如下命令完成:

cd  /home/tderp/.conda/envs/odoo12/odoo-dev
mkdir -p  community_odoo/library_app/static/description
cp odoo/addons/note/static/description/icon.png  community_odoo/library_app/static/description

补充:开启开者发者模式,点击 应用>刷新本地模块即可搜到我们创建的应用
选择证书(开源协议)
为开发的模块选择证书(开源协议)非常重要,应谨慎考虑其代表着什么。Odoo 模块最常用的协议是LGPL(GNU Lesser General Public License)第3版(LGPL v3.0)和AGPL(Affero General Public License)。
LGPL 授权更广,它允许在无需分享相应源码的情况下对代码作出商业修改。AGPL则是一个更严格的开源证书,它要求派生代码及服务托管者分享源码。
了解更多有关 GNU 证书请访问GNU官网。
安装新模块
现在我们已经有了一个简化的模块,还没有任何功能,但我们可以通过安装它来检查各项是否正常。
要进行这一操作,需激活开发者模式,刷新本地应用,
在这里插入图片描述
找到模块Library Management,进行安装。
在这里插入图片描述
更新模块
开发模块是一个不断迭代的过程,我们会需要应用更新所修改代码并在 Odoo 中可见。可以在后台界面应用中搜索对应模块并点击升级按钮。但如果修改的是 Python 代码,点击升级不会生效,需要先重启服务方可生效。这是因为 Odoo 仅会加载一次 Python 代码,此后的修改就要求进行重启才会生效。
有时,模块中既修改了数据文件又修改了 Python 代码,那么就需要同时进行如上两种操作。这是 Odoo 开发者的常见困惑。幸好还有更好的方式,最保险的方式是重启 Odoo 实例并应用升级至开发数据库。通过Ctrl + C停止服务实例,然后通过如下命令启动服务并升级library_app模块:

/home/tderp/.conda/envs/odoo12/odoo-dev/odoo/odoo-bin -d Demo  -u library_app

-u(或全称–update)要求使用-d 参数并接收一个逗号分隔的待升级模块集。例如可以使用-u library_app,mail。模块升级后,所有依赖该模块的模块也会被升级。这是保持用于扩展功能的继承机制完整性的基础。
在本系列文章中,如需应用对模块代码的修改:

  • 添加模型字段时需进行升级。修改 Python 代码(含 manifest 文件)时需要重启服务。
  • 修改XML或CSV文件时,需进行升级。在不确定时,同时重启服务并升级模块。

在不确定时,最保险的方式是通过-u参数来重启 Odoo 实例,按下键盘上、下方向键可在使用过的命令间切换。进行这一操作时,我们经常会使用到 Ctrl+C,向上方向键和Enter 键。
或者要避免这种重复的停止/启动操作,可使用dev=all选项。这样在保存XML 和 Python文件修改时会自动进行重载.
演示教程:
http://www.tderp.com/download/details/odoo12-853
http://ctdrive.tderp.com/file/13502532-465049218

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

r_nznf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值