当前位置:   article > 正文

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

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:

  1. # -*- coding: UTF-8 -*-
  2. # 框架引用
  3. from odoo import api, fields, models
  4. class ExampleModel(models.Model):
  5. _name = 'example.model' #模块标识
  6. _description = '随便写' #描述
  7. # 具备属性/页面显示限制
  8. value = fields.Char(string='值')
  9. note = fields.Text(string='说明', default='说明信息')
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <odoo>
  3. <!-- Tree视图重写,model固定为:ir.ui.view-->
  4. <record id="example_tree_view" model="ir.ui.view">
  5. <field name="name">tree视图</field>
  6. <!-- model引用:class:ExampleModel的_name -->
  7. <field name="model">example.model</field>
  8. <!-- arch下代码是操作的 -->
  9. <field name="arch" type="xml">
  10. <tree>
  11. <!-- 取模块的元素的name -->
  12. <field name="value" width="100px" />
  13. <field name="note" width="100px" />
  14. </field>
  15. </record>
  16. <!-- 默认视图,model固定为:ir.actions.act_window -->
  17. <record id="example_act_window" model="ir.actions.act_window">
  18. <field name="name">默认视图</field>
  19. <field name="res_model">example.model</field>
  20. <field name="view_mode">tree,form,search</field>
  21. </record>
  22. <!-- 主菜单按钮 -->
  23. <menuitem name="主菜单按钮"
  24. id="main_menu"
  25. groups=""
  26. sequence="10" />
  27. <!-- 子菜单按钮,画面取视图id -->
  28. <menuitem name="子菜单按钮"
  29. id="list_menu"
  30. parent="main_menu"
  31. action="example_act_window"
  32. sequence="10" />
  33. </odoo>

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

odoo框架的其他总结:

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/772950
推荐阅读
相关标签
  

闽ICP备14008679号