Odoo的基础知识与环境配置

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。
1.Odoo是什么?
Odoo(原名为OpenERP,更早之前则为TinyERP)是一套企业资源规划(ERP)及以客户为中心的客户关系管理(CRM)系统。以Python语言开发,数据库采用开源的PostgreSQL,系统以GNU GPL开源协议发布。
系统提供较灵活的模块架构,常用模块包括:采购管理、销售管理、库存管理、财务管理、货品管理、营销管理、客户关系管理、生产管理、人事管理及服务支持等等。用户可以直接从模块库中选择安装适用的模块,进行模块卸载、升级的管理操作。Odoo现在有一套完整的业务应用,满足所有的企业业务需求,从网站、电子商务到制造,库存和会计等,所有的领域无缝集成。这是第一次一个软件系统,被设计成能达到这么全面的功能覆盖。
客户端用户界面是基于GTK的,同时支持Linux和Windows平台。目前还有开发中的基于TurboGears的eTiny Web客户端。
2.Odoo的环境配置
在开始环境配置之前,我们可以先了解一下WSL(全称为Windows Subsystem for Linux),官方翻译为“适用于Linux的Windows子系统”。因为程序开发会特别依赖终端命令的开发,而win10下的cmd终端并没有linux那么多的命令和软件扩展。而且作为一个程序员,不管我们是做前端或者是后端,多少都需要对linux环境有一定的了解,因为程序运行的环境就是在linux中,有些功能只有在linux环境下才能实现。
而WSL的优势就在于,在win10的环境下运行,并不需要特地装一个Linux的系统。并且其唤出终端就可以直接使用linux的命令,相比虚拟机来说会方便许多。最重要的是wsl的学习成本很低。在此处WSL只需要了解即可。
接下来开始正式的环境配置:
第①步 连接WSL
以管理员模式运行Windows powerShell
输入以下代码 启动WSL(Windows subsystem for linux)功能
输入以下代码启动虚拟机功能
此时重启电脑以完成WSL的安装及更新。
接下来还是打开Power Shell,将WSL2设置为默认版本
现在可以下载Windows terminal和Ubuntu 20.04LTS,在微软商店中即可下载。
下载好后打开Ubuntu控制台就会让你为新的Linux系统创建用户和密码
接下来用Windows Terminal打开Power shell在其中查看WSL的状态 (wsl --list -v)
在powershell中启动并进入WSL(wsl)
在这里输入exit可以从Linux Bash中 logout 并回头PowerShell中
但此时Linux系统仍然会在后台运行, 需要使用以下代码关闭Linux系统
此时再查看发现状态由Running变成了Stopped
点击此处即可再Windows Terminal中连接WSL
第②步 安装postgreSQL
输入sudo apt-get update更新apt工具源,并验证新建Linux用户时的密码
然后再用apt工具安装postgreSQL
确认postgreSQL安装成功
启动PostgreSQL服务
PostgreSQL默认用户为postgres, 但Odoo会禁止以默认用户连接,所以此时我们需要创建一个新的postgreSQL用户,建议与Linux用户同名。
同时也需要创建一个数据库(需要postgreSQL服务运行),这里我同样同名创建。
下面有一些postgreSQL的常用命令:
查看postgreSQL服务状态:sudo service postgresql status
启动PostgreSQL服务:sudo service postgresql start
停止PostgreSQL服务:sudo service postgresql stop
创建数据库:createdb <数据库名>
连接到数据库: psql <数据库名>
第③步 安装python及其他依赖:
首先检查python版本(版本不够时可以使用“sudo apt install python3” 安装):
安装python开发工具用:sudo apt install python3-pip python3-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libssl-dev libpq-dev libjpeg-dev
第④步 下载Odoo源码:
首先我们创建source文件夹并进入,然后从GIthub拉取Odoo源码
用cd切换到 /src/odoo后安装工具
设置python虚拟环境并启动
接下来依照odoo文件夹中的requirements.txt安装依赖(此过程耗时较长且可能因为网络等原因中断,如果发生此情况请多试几次)
依赖安装完毕后,可以在确认PostgreSQL服务已经在运行后(sudo service postgresql status查看服务状态)通过二进制文件运行Odoo, 要注意自己数据库的名字要输入正确(-i base为首次启动初始化数据库, 以后启动不需要)
成功后可在浏览器中输入http://localhost:8069/进入到登录界面,以默认用户名及密码admin登录。
到此处Odoo的开发环境就算是配置完成啦!
3.Odoo的一些基础知识
在学习Odoo开发之前,我们需要了解一下Odoo的基础知识。Odoo遵行的是MVC设计模式,我们可以从这个方面入手了解odoo。
首先是odoo模型开发:
odoo模型对象基本分为三种:
odoo.models.Model:常规数据库持久模型,在模块安装或升级的时候会自动在数据库中创建相应的数据表。
odoo.models.TransientModel:临时记录的模型超类,可暂时的持久化,表中数据会定期进行清理。
odoo.models.AbstractModel:抽象模型超类,不会在数据库创建对应表,可为多个Model提供相同属性的统一声明。
odoo模型常用的属性定义有以下几种:
_name:模型唯一的标识,该类非继承父类时必须指定。
_description:模型描述。
_inherit:被继承的模型名称。
_table:模型对应的数据表的名称,默认值是_name的值中将.转换成_(一般无需配置)
_rec_name:在其他模型中引用此模型时显示的字段,默认为name。
_order:排序字段。
然后是view视图的开发:
常用的视图字段有:
name:视图描述,必须配置
model:视图对应的模型名称
arch:视图布局描述
常用的视图属性:
create: 禁用/启用创建记录,值为ture或false
edit:禁用/启用编辑记录,值为true或false(在form、list、gantt中使用)
delete:禁用/启用删除记录,值为true或false(在form、list中使用)
duplicate:禁用/启用复制记录,值为true或false(在form、list中使用)
import:禁用/启用导入功能,值为true或false(list中使用)
widget:控件类型
常用的widget类型:
progressbar:进度条,按百分比标签
selection:下拉选择菜单
radio :单选标签
date:日期标签
text:文本标签
checkbox:复选框标签
url:网站链接标签
one2many_list:一对多标签
monetary:金额标签
many2many_binary :文件上传
接下来是Odoo常用的字段类型
我们可以自己理解一下模型与字段的关系:简单理解为模型由字段组合配置,字段装饰了模型。连接数据库后模型映射为数据库中的表,字段映射为表中的例。
基础字段类型:
char :单行字符串(限制长度)
text :多行字符串 (无长度限制)客户端中显示为文本框
Boolean :True /False
integer:封装int
float :fields.Float(string='**',digists=(1,2)) digists属性定义整数部分和小数部分的位数。
Date:短日期型 包含年月日
Datetime:时间戳型 包含年月日时分秒
Html:封装html代码内容
binary :封装二进制内容
selection:枚举类型(下拉列表显示)需要在其中预定义展示的数据
高级字段类型:
reference:引用字段,可以实现让用户自定义要引用的模型和记录。可以通过定义函数来定义字段选择过滤条件。
关系字段类型:
many2one:需要在字段属性中填写关联模型的名称(主键)
one2many:需要在字段属性中填写关联模型的名称(主键)和关联字段(外键)
使用one2many字段时,many2one必须同时使用。
many2many:需要制定关联模型名称,中间表名称,当前关联模型id,需要关联模型的id。
如果没有指定关联表,odoo会自动创建一张关联表,包含两张表的主键字段。
格式:fields.many2many(关联模型名称,中间表名称,当前关联模型id,需要关联模型的id)
保留字段类型:
id: Integer类型,表主键模型中记录的唯一标识。
create_date:Datetime类型, 记录的创建日期。
create_uid: Many2one类型,记录的创建者。
write_date:Datetime类型, 记录的最后修改日期。
write_uid: Many2one类型, 记录最后修改者。
特殊字段类型:
active:Boolean类型,控制记录是否可见。(default=False 记录不可见)
name: Unicode(字符串)类型,显示各种行为。
下面补充一下常用字段的属性:
string :字符串类型 默认值为字段名,是在视图中显示的字段标签。
required :bool类型 默认值为False, 表示这个字段是否可以为空(设置是否必填作用)。
readonly:bool类型 默认值为False, 表示这个字段是否只读。
help:字符串类型, 为用户提供帮助提示。
index:bool类型 默认值为False,表示是否在对应数据库列上创建数据库索引。
最后说一下模型中的装饰器:
装饰器: 是指让其他函数不需要做任何代码变动的前提下增加额外功能。
Odoo常用的装饰器:
Model装饰器:@api.model self仅代表自己 不包含记录信息。
onChange装饰器:@api.onchange('field') 监听某个字段发生改变时,触发对应方法。
Constraints装饰器: @api.Constraints('field') 约束某些字段(记录修改包含装饰器指定的字段,就会触发对应方法,通常用于字段检验。
Depends装饰器:@api.depends('field') 在函数中,对该字段值进行处理时,如果计算值依赖于其他相关字段,不论是与该字段隶属同一张表的还是其他表的字段,都会触发所编写的字段函数。
总结:
方法中包含的self不想包含任何记录 使用model装饰器 与self无关
onchange字段发生监听改变时绑定函数,绑定字段执行相应的方法
对字段合法性进行校验时使用constraints装饰器进行字段约束。
虽然 @api.depends 与@api.onchange有诸多相似的地方,但一个重要区别就是 onchange 的侦测字段范围需要在同一个模型或界面上;而depends 可以侦测关联的模型的字段(可以跨不同表)。
以上是本人近期开始学习Odoo整理的一些知识,写的比较杂乱,如有错误的地方请指正。