扫码阅读
手机扫码阅读

Odoo的基础知识与环境配置

288 2023-09-06

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

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整理的一些知识,写的比较杂乱,如有错误的地方请指正。

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247486888&idx=1&sn=887aa3f81b227c650eab48008f4d2b96&chksm=c02c360ef75bbf182669a1fa42ccbef4b474a7c74d36a07ba82435bacb9f0e7ac1f31c6afdfc#rd