odoo16 创建第一个应用插件

重写一遍的原因是视频太模糊了,看不清,也不好复制代码;
本章节我们将向大家介绍如何用odoo16创建第一个插件。
在此之前,你可以了解扩展的知识:
E-R图
正则表达式
MVC模式
继承
odoo字段类型详解
步骤一:数据结构设计
在经过需求分析→详细设计后,我们得到如下E-R图。

步骤二:插件生成
odoo生成一个可以安装的插件只需要一个__manifest__.py文件。
在odoo 16中,__manifest__.py文件是用于描述应用程序的元数据和配置信息的文件。以下是__manifest__.py文件中一些常用参数的说明,所有的参数写成一个字典:
name: 应用程序的名称。
summary: 应用程序的简短描述,通常用于应用商店的列表页面。
description: 应用程序的描述信息,用于在应用商店或其他地方展示。
version: 应用程序的版本号。
category:应用程序的分类。
website: 应用程序的官方网站。
author: 应用程序的开发者或发布者名称。
company:应用程序的公司。
depends: 指定应用程序依赖的odoo模块列表。
license: 应用程序的许可证信息,如GPLv3等。
application:是否为应用程序,如销售是应用程序,销售报表则不是。
installable: 是否可以作为odoo模块安装。通常为True。
auto_install:是否自动安装,例如销售报表依赖销售,则可以设置为如果销售安装后,销售报表自动安装。
这些参数可以根据具体需求进行配置和修改,以满足应用程序的需求和特性。

odoo.conf配置文件我们改两个地方,addons_path和dbfilter
addons_path:我们新增的插件放到ilearning目录下,因此将ilearning目录添加在addons_path中,以逗号隔开;addons_path以odoo-bin所在的目录为参考目录,因此ilearning的相对路径为odoo\ilearning;
dbfilter:是根据正则表达式匹配要显示的数据库,比如student_sys可以匹配student_sys开头的数据库,比如student_sys123,student_sys__等;

运行odoo16,创建一个应用,注意:配置了dbfilter,所以数据库一定要以student_sys开头,我们就直接用student_sys。


这样,我们就能看到ilearning下面的jcerp_student_01插件了,只是我们其他插件是写好了的,所以也一并都能够看到。
步骤三:后端模型
后端模型是写在.py文件中的,将后端模型代码放在models中,并通过__init__.py引用models,models中的__init__.py再引用其目录下的.py模型文件,这是一种编程规范,符合MVC模式,早期odoo的.py文件直接放在插件根目录下,从功能上来说也不影响。



按照步骤一我们设计的数据结构,我们继承了models.Model,代码如下:
odoo的字段类型可以参考:odoo字段类型详解
class_archives.py
course_archives.py
grade_archives.py
student_archives.py
步骤四:权限控制
权限文件是放在security的ir.model.access.csv文件中,另外还有security.xml以后再讲。
写法也简单
id:access_模型(_连接)_权限组,例如学生用户权限,access_student_archives_group_user或者access_student_archives_user;
name:可以用模型(.连接),例如学生用户权限,student.archives
model_id:必须是:model_模型(_连接),model_student_archives
group_id:群组,这里我们只需要知道基本用户组是base.group_user
rwcu:读写增删权限
整体的意思就是群组base.group_user对学生具备可读可写可创建可删除的权限,那么如果某个用户赋予了这个群组,那么这个用户就具备了可读可写可创建可删除的权限。
步骤五:前端视图
注意:要把所有的视图文件、权限文件都在__manifest__.py的data中引用!!!

以student_archives_views.xml为例:
菜单视图:从代码来看,比较明了,就是定义了一个学生管理系统,并且在其下又定义了4个子菜单,父子菜单通过parent来关联,顶级菜单没有parent;
name:菜单名称
id:菜单的id,整个系统必须唯一,一般以menu_开始命名;
web_icon:顶级菜单的图标;
sequence:平级菜单的显示顺序;
action:点击菜单触发的动作,顶级菜单也可以指定动作,如果不指定,则默认显示第一个具有action的子菜单对应的动作。如果某一级菜单下所有的子菜单都没有action,则该菜单不显示。
action视图:
也称动作视图,是点击菜单后执行的动作,动作的效果是根据action的定义显示对应的视图。
id:整个系统必须唯一,以action_开头,对应的模型是ir.actions.act_window
name:进入界面后,界面显示的名称;
view_mode:该action视图对应有哪些视图,字段较多一般会选择tree及form视图,字段较少时只选择tree视图即可;一般这些视图都需要我们去定义,如果不定义,odoo会根据后端模型自动生成视图。
view视图:
一般来说,我们会定义action中view_mode中的视图与搜索视图;
tree视图:
id:整个系统必须唯一,一般以view_xx_tree命名,对应的model是ir.ui.view
name:tree视图的名称
model:这里的model一定要与后端模型保持一致
arch:tree视图的内容,按照tree>field
form视图:
id:整个系统必须唯一,一般以view_xx__form命名,对应的model是ir.ui.view
name:form视图的名称
model:这里的model一定要与后端模型保持一致
arch:form视图的内容,form>sheet>group>group>field层级,可以自行去掉某一层级观察效果
search视图:
id:整个系统必须唯一,一般以view_xx__search命名,对应的model是ir.ui.view
name:search视图的名称
model:这里的model一定要与后端模型保持一致
arch:search视图中的条件字段,可以是后端模型中的char、selection、对象;
class_archives_views.xml
course_archives_views.xml
grade_archives_views.xml
运行效果
