本教程假定已经在windows10下搭成odoo13可运行环境,若需搭建开发环境请参考文章
https://blog.csdn.net/zhujisoft/article/details/104461367
命令行格式 odoo-bin scaffold
以下命令行,示意在addons目录下创建自定义模块openacademy
python odoo-bin scaffold openacademy addons
如上图所示,addons/openacademy目录下有五个子目录分别是controllers,demo,models,security,views。
在openacademy目录下的文件_manifest_.py,则描述了模块的简要信息和包含的相关文件。
本模块模拟管理一个开放学院的讲座和具体场次,其中涉及三个主要对象openacademy,course,session。它们在models/models.py中详细定义。
_name = 'openacademy.openacademy' 定义本对象的内部命名
_description = 'openacademy openacademy' 描述信息
name = fields.Char() 定义对象的属性,fields有一些常用属性分别是
string
(unicode
, 默认: 字段的名称) 在图形界面中显示为字段的标签名 (对用户可见).
required
(bool
, default: False
) 此字段是否必须有值,默认为否。
help
(unicode
, default: ''
) 帮助信息,在图形界面中作为小提示显示给用户.
index
(bool
, default: False
)是否为索引字段,要求 Odoo 为此列创建一个索引,默认为否.
带字段属性的对象属性定义示例为
name = fields.Char(string="Title", required=True) 显示标签为Title,内容必填
duration = fields.Float(digits=(6, 2), help="Duration in days") 日程,浮点数字类型,共6位,2位小数,帮助信息为日程持续天数。
对象间的字段支持多对一、一对多和多对多,分别为Many2one、One2many和Many2many。
例如,某个讲座需要负责人,多个讲座可由一人负责,这个人在本例中是odoo中的用户res.users,那么在course对象中定义一个多对一的属性responsible_id = fields.Many2one。
同样一个讲座course可以有多个场次session,那么需要一个一对多的属性关联session_ids = fields.One2many。
具体定义如下图
菜单定义为模块安装后在odoo菜单中显示的名称和样式,在xml文件中以定义,用parent= menuitem-id表示树形结构,点击菜单项后的动作用action=fuction定义。 本例中为veiws/openacademy.xml文件,具体实现如下所示。
openacademy菜单
点击Courses菜单后的course_list_action动作定义
启动时用--addons-path指定自定义模块所在路径
python odoo-bin -r odoo -w odoo --addons-path=addons
登录odoo系统后,进入应用菜单,并且叉掉应用,搜索openacademy模块,如下图
然后点击安装,成功后自定义模块就会显示在odoo菜单中
需注意的问题:
odoo13自定义模块默认情况下安装后不会自动显示,原因是ir.model.access.csv文件中没有授权,安装前需将文件内容改为
参考文档
https://www.odoo.com/documentation/13.0/howtos/backend.html#build-an-odoo-module