odoo笔记-框架文档配置及简要逻辑

入新公司第二天,新接触odoo框架,项目采用的是14-15版本(据说最新16有一定区别)

组内大佬提供odoo源码文件夹含义:

  • controllers        # 控制器 (HTTP路径)
  • data                 # 演示和数据XML
  • doc                  # 模型说明
  • models            # 定义模型
  • report              # 报告
  • security           # 权限管理
  • i18n                 # 翻译文件
  • views               # 视图和模型
  • static                # 静态文件css、js、img等
  • tests                # 存放 python 和 yml 测试用例
  • wizard              # 放临时的 model 和视图
  • __manifest__.py     # 模块详细信息&依赖

odoo框架采用ORM和xml

个人理解:

代码的基本单位是模块(如 class xxx(models.Model):),模块分为两种,一种是数据库表的映射,与数据库表完全对应(或者说数据库就是根据这种模块建表的),odoo框架配置好后,运行会自动生成配置的数据库和与其模块对应的实体表;另一种模块是前端的展现,无与之完全对应的实体表存在,是多个表统一计算合并的结果,与最终画面的呈现对应,只在运行中生成实例,并不会持久化数据。

模块是odoo处理数据在代码中的体现,以类的形式存在,本质上就是被代码包装的表数据结构。

在Odoo中,模块被加载到环境中的过程可以分为以下几个步骤:

  1. 模块的声明:首先,你需要在Odoo的配置文件中声明要加载的模块。在配置文件中,你可以指定要加载的模块的路径,以及加载的顺序。配置文件通常是odoo.conf

  2. 模块的发现:Odoo会通过扫描模块路径来发现所有可用的模块。模块路径可以在配置文件中指定,也可以通过命令行参数传递给Odoo。

  3. 模块的依赖解析:Odoo会解析每个模块的__manifest__.py文件,该文件描述了模块的元数据和依赖关系。Odoo会根据依赖关系的定义,确定模块加载的顺序。

  4. 模块的注册:一旦依赖关系被解析,Odoo会将模块注册到环境中。注册过程会创建模块相关的数据库表,并将模块的数据结构添加到数据库中。

  5. 模块的安装:一旦模块被注册到环境中,你可以选择安装模块。安装模块会执行模块的安装脚本,该脚本可以用来创建默认数据、配置权限等。

  6. 模块的加载:一旦模块被安装,它就可以被加载到环境中。加载模块会将模块的代码加载到内存中,使其可以被其他模块或用户访问和使用。

应用是功能集成的基本单位,整个odoo框架相当于一个appstore,每个应用是一个app,在框架运行的网站中可以选择启用某个应用,然后就可以运行该应用的网页表单等。xml是odoo框架实现其网页展现的核心,个人认为也是他性能差的原因之一。xml里定义了应用网页的展现,一个应用的主菜单、子菜单,各个子菜单的数据展示、数据编辑、查询预设条件等都在xml里设置。

odoo的语法命名和常规语言不太符合,性能堪忧,设计让人无语,如:

模块中的某项元素在代码中的引用是用'name',在xml中建立对应的联系需要取他的name值,单个元素(或者说列名)在画面中的显示是string。但是视图中,画面和菜单的显示值为name,联系标识是id:

# -*- coding: UTF-8 -*-

# 框架引用
from odoo import api, fields, models


class ExampleModel(models.Model):
    _name = 'example.model'  #模块标识
    _description = '随便写'  #描述

    # 具备属性/页面显示限制
    value = fields.Char(string='值') 
    note = fields.Text(string='说明', default='说明信息')
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <!-- Tree视图重写,model固定为:ir.ui.view-->
    <record id="example_tree_view" model="ir.ui.view">
        <field name="name">tree视图</field>
        <!-- model引用:class:ExampleModel的_name -->
        <field name="model">example.model</field>
        <!-- arch下代码是操作的 -->
        <field name="arch" type="xml">
            <tree>
                <!-- 取模块的元素的name -->
                <field name="value" width="100px" />
                <field name="note" width="100px" />
        </field>
    </record>

    <!-- 默认视图,model固定为:ir.actions.act_window -->
    <record id="example_act_window" model="ir.actions.act_window">
        <field name="name">默认视图</field>
        <field name="res_model">example.model</field>
        <field name="view_mode">tree,form,search</field>
    </record>

    <!-- 主菜单按钮 -->
    <menuitem name="主菜单按钮"
        id="main_menu"
        groups=""
        sequence="10" />

    <!-- 子菜单按钮,画面取视图id -->
    <menuitem name="子菜单按钮"
        id="list_menu"
        parent="main_menu"
        action="example_act_window"
        sequence="10" />
</odoo>

以上代码经修改,仅供参考。

odoo框架的其他总结:

1、代码更新到网站需要重启服务(代码重编译,非热更新)

2、xml更新到网页只需要在网页上点应用升级(静态文件读取到数据库,及其卡)

3、model里对一对多的单选等限制不是绝对的(应该是需要额外设置)

4、框架自带env对象,多态的实现为内存中以key-value形式保存最后一次重写的方法,即可直接继承重写无需修改调用父类方法

5、更新数据不支持map表等方式批量修改,只能一条一条改,入库也不支持批量入库,也是一条一条入库。修改数据时遇到one2many的表需要无脑for循环,效率极低

生活不易, 承接程序和各类论文辅导, 中英, java-python-vue-react..等等,  一帮大厂在职兄弟承包各种类型语言和程序, 详情+v

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1 ERP 简介 1 1.1 Odoo 历史 1 1.2 ERPⅡ 或商业智能化 2 1.2.1 什么是商业智能 4 2 Odoo 框架简介 7 2.1 python 模块分析 8 2.2 python2 还是 python3 8 3 Odoo 的安装和配置 9 3.1 PostgreSQL 数据库 10 3.2 Ubuntu14.04 下可能缺失的软件包 11 3.3 网页显示 node.js 方面 11 3.4 其他问题 12 3.5 通过命令行运行时的配置 12 3.5.1 –xmlrpc-port=8888 12 3.5.2 –addons-path=addons 12 3.5.3 数据库的一些配置 13 3.5.4 –save 13 3.6 将安装环境封装起来 13 3.7 文档编译 14 4 初入 Odoo 17 4.1 管理数据库 17 4.2 登录界面 18 4.3 Administrator 首选项 19 4.4 导入一个翻译 20 4.5 新的 Demo 用户 20 4.6 模块管理 21 4.7 修改公司信息 21 4.8 打开技术特性支持之后 22 4.9 进销存和财务系统的抽象讨论 22 4.9.1 以采购部门为例 23 4.10 安装和配置模块 24 5 创建自己的模块 27 5.1 快速生成模块骨架 27 5.1.1 python 模块的 init 文件 28 5.1.2 作为 Odoo 模块的说明文件 29 5.2 安装自定义模块 32 5.2.1 模块文件夹管理 32 5.3 一个简单的演示模块 33 5.3.1 controllers 33 5.3.2 views 33 5.3.3 models 35 5.3.4 security 37 5.3.5 美化网页 38 5.4 加分项: 通过 pgadmin3 来查看数据库 39 5.4.1 安装 39 5.4.2 连接服务器 39 5.4.3 图形化查询 40 6 Odoo 开发基础: 请假模块第一谈 43 6.1 纯理论讨论 43 6.2 定义模型 45 6.3 加入菜单 46 6.3.1 act_window 的属性 48 6.3.2 menuitem 的属性 48 6.4 视图优化 48 6.4.1 修改 tree 视图 49 6.4.2 修改 form 视图 49 6.5 完整的 views.xml 51 6.6 给模块加个图标 53 7 Odoo 开发基础: 工作计划模块第一谈 55 7.1 数据访问权限管理 61 7.1.1 access rule 62 7.1.2 record rule 62 8 扩展现有模块-继承机制 65 8.1 给模块增加 field 65 8.2 修改已有的 field 66 8.3 重载原模型的方法 66 8.3.1 什么是 Recordset 67 8.3.2 Odoo 里面的 domain 语法 68 8.3.3 recordset 的 search 方法 69 8.4 视图 xml 文件的继承式修改 70 8.4.1 视图元素添加 71 8.4.2 原视图元素属性修改 71 8.5 多态继承 72 8.6 修改其他数据文件 73 8.6.1 删除记录 73 8.6.2 更新数据 73 8.7 委托继承 74 9 理解模型内的数据文件 75 9.1 理解外部 id 75 9.2 使用外部 id 77 9.3 导出或导入数据文件 77 9.4 快捷输入标签 78 9.5 用 field 标签设置值 78 9.5.1 eval 语法 78 9.5.2 ref 属性 79 9.5.3 One2many 和 Many2many 的 eval 赋值 79 10 Odoo 开发基础: 请假模块第二谈 81 10.1 本例涉及到的数据库表格简介 89 10.2 工作流概念入门 89 10.2.1 定义工作流对象 90 10.2.2 创建节点 91 10.2.3 创建连接 91 11 Odoo 模型层详解 93 11.1 _name 93 11.2 各个表头属性 93 11.3 name 字段 94 11.4 具体模型的数据 94 11.5 模型间的关系 95 11.6 工作流 95 12 Odoo 视图层详解 97 13 附录 99 13.1 Odoo 里老的 API 99 13.2 PostgreSQL 数据库命令行操作 99 13.2.1 命令行数据库备份 99 13.3 反向代理 (reverse proxy) 99 13.3.1 安装 ngnix 软件 100 13.3.2 强制 https 连接 102 13.3.3 nginx 优化 102 13.3.4 轮询机制 102 13.4 跟踪项目源码初始化进程 102 13.4.1 base 模块 104 13.4.2 web 模块 105 13.4.3 web_kanban 模块 105 13.5 配置会计科目 105 13.5.1 配置会计科目类型 105 13.5.2 配置会计科目 106 13.6 分录 106 13.7 新建业务伙伴 106 13.7.1 新建业务伙伴标签 106 13.7.2 新建客户 106 13.8 创建新的产品 107 13.9 设置会计年度 107 13.10向供应商下单 107 13.11会计学入门 107 13.11.1财务报表 108 13.11.2原始凭证 108 13.11.3账户 108 13.11.4分类帐 109 13.11.5会计科目表 109 13.11.6报告期间 110 13.12参考资料 110

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值