ODOO学习笔记(7):模块化架构(按需安装)
一、Odoo模块化架构概述
Odoo是一个功能强大的企业资源规划(ERP)系统,其模块化架构是它的核心优势之一。这种架构允许系统通过添加、移除或修改不同的模块来灵活地适应企业的各种业务需求。

- 核心模块与自定义模块:
- Odoo本身带有一系列核心模块,涵盖了基本的业务功能,如销售、采购、库存、会计等。这些核心模块提供了标准化的业务流程和数据结构,构成了系统的基础框架。
- 同时,用户可以根据自己企业特有的业务流程和需求创建自定义模块。自定义模块可以与核心模块无缝集成,扩展系统的功能。

二、模块的结构组成

-
模型(Models)
- 模型是Odoo模块的核心部分,用于定义数据结构。它类似于数据库中的表结构,定义了业务对象的属性和关系。
- 例如,在销售模块中,有“销售订单”模型。这个模型可能包含订单日期、客户信息、产品明细、销售金额等属性。模型之间也可以建立关联,如“销售订单”模型与“客户”模型、“产品”模型存在多对一的关系(一个客户可以有多个销售订单,一个产品可以出现在多个销售订单中)。
- 通过继承,模型可以扩展或修改已有模型的功能。比如,可以创建一个自定义的销售订单模型,继承自标准的销售订单模型,添加新的字段来满足企业特殊的订单信息需求,如特殊的订单备注字段用于记录内部审批意见。
-
视图(Views)
- 视图用于定义用户与模型数据的交互界面。它决定了数据如何展示给用户以及用户如何输入和操作数据。
- 有多种类型的视图,如表单视图(Form View)、列表视图(List View)和看板视图(Kanban View)。
- 表单视图通常用于展示和编辑单个记录的详细信息。例如,在销售订单的表单视图中,用户可以看到销售订单的各个字段,如客户名称、产品明细等,并可以进行修改。列表视图则以表格形式展示多条记录,方便用户进行批量操作和筛选。看板视图适用于对任务或业务流程进行可视化管理,如在项目管理模块中展示项目任务的进度。
-
控制器(Controllers)
- 控制器处理用户与系统之间的交互逻辑。它接收用户的请求,如通过网页浏览器发送的HTTP请求,然后调用相应的模型方法来处理请求,并返回合适的视图给用户。
- 例如,当用户在网页上点击“创建销售订单”按钮时,控制器会接收到这个请求,然后调用销售订单模型的创建方法来生成一个新的空白销售订单记录,并返回销售订单的表单视图给用户,以便用户填写订单信息。
-
数据文件(Data Files)
- 数据文件包含模块初始化和运行所需的初始数据,如默认的配置参数、基础的业务数据(如产品类别、货币类型等)。
- 这些数据可以在模块安装时被加载到系统中。例如,在安装库存模块时,数据文件会将默认的仓库位置、库存计量单位等基本信息加载到数据库中,确保模块能够正常启动和运行。
三、模块之间的交互

- 接口(Interfaces)和依赖关系(Dependencies):
- 模块之间通过定义明确的接口进行交互。一个模块可以提供接口供其他模块调用,也可以依赖其他模块的接口来实现自己的功能。
- 例如,销售模块可能依赖于产品模块的接口来获取产品信息。当创建销售订单时,销售模块通过调用产品模块的接口获取产品的价格、库存等信息,以确保销售订单数据的准确性。
- 模块之间的依赖关系在模块的安装和升级过程中起到关键作用。在安装一个模块时,系统会首先检查它所依赖的其他模块是否已经安装,并按照依赖顺序进行安装。在升级模块时,系统也会考虑依赖关系,确保升级过程不会破坏模块之间的交互和数据完整性。
四、模块的安装与升级

- 安装过程:
- 当安装一个Odoo模块时,系统会首先解析模块的结构,包括模型、视图、控制器和数据文件等部分。然后,它会按照模块定义的依赖关系,先安装依赖的模块。
- 接着,系统会创建模块中定义的数据库表(基于模型),加载初始数据(数据文件),注册视图和控制器,使得模块能够在系统中正常运行。
- 升级过程:
- 在升级模块时,系统会比较旧版本和新版本之间的差异。对于模型,它可能会添加新的字段、修改字段属性或者删除不再需要的字段。对于视图,可能会更新界面布局或添加新的交互功能。
- 系统会尽量以一种平滑的方式进行升级,保留已有的数据,并根据升级脚本对数据进行必要的转换和更新,以适应新的模块结构和功能要求。
相关文章:
ODOO学习笔记(7):模块化架构(按需安装)
一、Odoo模块化架构概述 Odoo是一个功能强大的企业资源规划(ERP)系统,其模块化架构是它的核心优势之一。这种架构允许系统通过添加、移除或修改不同的模块来灵活地适应企业的各种业务需求。 核心模块与自定义模块: Odoo本身带有一…...
Java的dto,和多表的调用
1理论 需求是新增菜品eg:菜名:豆腐脑;口味:甜口,咸口, 菜单表:dish;口味表dish_flavor; 1dto:数据传输对象 新建一个dishDto对象有两个表里的属性 2用到两个表,dish,d…...
时序数据库TimescaleDB安装部署以及常见使用
文章目录 一、时序数据库二、TimescaleDB部署1、repository yum仓库配置2、yum在线安装3、插件配置4、TimescaleDB使用登录pg创建插件使用超表 一、时序数据库 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库&#x…...
MG算法(英文版)题解
翻译: 考虑一个加法流,其中一个特定项目出现 n^(1/2) 次,并且有 n - n^(1/2) - 1 个其他不同的项目,每个项目出现一次。在应用 Misra-Gries(MG)算法时,应该选择哪个 ε(epsilon&…...
2-UML概念模型测试
1. (单选题, 1.0 分) UML中的关系不包括()。 A. 抽象B. 实现C. 依赖D. 关联 我的答案:A正确答案: A 知识点: UML的构成 1.0分 2. (单选题, 1.0 分) 下列事物不属于UML结构事物的是()。 A. 组件B. 类C. 节点D. 状…...
人工智能(AI)对于电商行业的变革和意义
 参考, x.content content --EXTRACTVALUE(x.Content, //zlxml//document//subdoc[antetypeid"3C38A8DAB01C473A9074A8EDD0B8553"]//utext) 主治医师, --EXTRACTVALUE(x.…...
RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段
🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…...
使用 Web Search 插件扩展 GitHub Copilot 问答
GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码,还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能,微软发布了一个名为 Web Search 的插件&am…...
workerman的安装与使用
webman是一款基于workerman开发的高性能HTTP服务框架。webman用于替代传统的php-fpm架构,提供超高性能可扩展的HTTP服务。你可以用webman开发网站,也可以开发HTTP接口或者微服务。 除此之外,webman还支持自定义进程,可以做worker…...
QtQuick.Controls 控件介绍(都有哪些type)
这里写目录标题 主要控件 官方示例1. quickcontrols示例示例1 控制controlsSliders滑块bottom与tab 示例2 系统对话框 systemdialogs示例3 仪表盘示例4 uiforms 表格-客户通讯录 2. quickcontrols2示例1 gallery 展示2 flat Style 扁平化 帮助文档 主要控件 Button:…...
Unity导出APK加速与导出失败总结(不定时更新)
APK导出加速 1、修改配置文件: 需要修改的文件位置:编辑器安装路径/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates 1.1 settingsTemplate.gradle文件修改 直接附上最终效果: pluginManagement {repositories {**ART…...
域名绑定服务器小白教程
域名绑定与 Docker 容器部署指南 1. 获取云服务器公网 IP 登录云服务提供商控制台记录服务器公网 IP(例:123.456.78.90) 2. 配置域名 DNS 解析 登录域名注册商控制台添加 A 记录: 主机记录:类型:A值&am…...
用 Collections.synchronizedSet 创建线程安全的 HashSet
在 Java 中,HashSet 本身并不是线程安全的。如果在多线程环境下使用 HashSet,你需要采取额外的同步措施来保证线程安全。Collections 工具类提供了一种简便的方法来创建线程安全的集合——synchronizedSet 方法。这种方法通过在所有公共方法上添加同步块…...
【深度学习】模型参数冻结:原理、应用与实践
在深度学习领域,模型参数冻结是一种重要的技术手段,它在模型训练和优化过程中有着广泛的应用。本文将详细介绍模型参数冻结的相关概念、应用场景、在代码中的实现方式以及一些实际的案例分析。 一、模型参数冻结的概念 在深度学习模型的训练过程中&…...
数字后端教程之Innovus report_property和get_property使用方法及应用案例
数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性,主要有cell,net,PG Net,Pin,时钟clock,时序库lib属性,Design属性,timing path,timin arc等…...
JS中console对象内部提供调试方法
console.log() console.log() 是最常用的输出方法,用于将信息输出到浏览器控制台,通常用于普通的调试信息。 用途: 打印普通的消息、变量、对象等。 let user { name: "Alice", age: 25 }; console.log(user); // 输出对象 console.log(&…...
python设计模式
一、单例模式 学习目标:掌握单例模式的作用和写法 可以明显的看出他两是独立的对象,而且是两个完全不同的id 当我们希望是s1和s2是同一个对象,这就是我们所说的单例模式。 最后获得的都是同一个对象,这样就可以避免去重复的创建…...
机器学习 笔记
特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…...
江协科技之STM32驱动1.3寸/0.96寸/0.91寸OLED显示屏介绍
目录 编码介绍 ASCII码 汉字编码 取模软件 江协科技OLED库适用器件 SSD1306简介 模块引脚更改 0.91寸OLED适配 模块驱动必备知识 驱动代码 OLED_Font.h OLED.h OLED.c 编码介绍 ASCII码 ASCII码是一套数字到字符的映射标准,它规定了用什么数字表示…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
