当前位置:   article > 正文

Odoo部分总结_odoo 持久化数据存储在哪

odoo 持久化数据存储在哪

Odoo结构

  • 数据层、逻辑层、展示层
    • 数据层:是最底端一层,负责数据持久化存储,Odoo借助PostgreSQL来实现。
    • 逻辑层:负责与数据层的所有交互,并由Odoo服务完成。通常,底端数据库不应通过这一层获取,只有这样才能保证权限控制和数据一致性。在Odoo的核心代码中包含供这一接口使用的ORM(对象关系映射Object-relational Mapping)引擎。ORM提供插件模块与数据交互的API。
    • 展示层:用于展示数据并与用户交互,通过客户端实现用户体验。客户端与ORM API交互来读、写、验证或执行其他操作;通过RPC调用ORM API方法。这些操作发往Odoo服务器端操作,然后结果发送回客户端做进一步处理。

注:Odoo自带全面功能的web客户端

视图列表

  • 视图类型分类
    • 表单视图(Form)
    • 树状列表视图(Tree)[列表视图(List)]
    • 搜索视图(Search):指右上角搜索框中的过滤选项
    • 看板视图(Kanban)
  • 继承视图:每个base视图都可以有多个扩展,称为继承视图。每个继承视图可以对base视图添加修改,如对已有表单添加字段。(继承视图自身也可以被其它视图继承,这时最外层继承在内层继承执行后作用于base视图)

创建第一个Odoo应用

  • 创建新的插件模块
    • 一个插件模块是包含实现一些Odoo功能的文件,可以添加新的功能或修改已有的功能。插件目录必须含有一个声明或描述文件_manifest_.py,以及其它模块文件。
      • 创建新模块,需求:
        • 确保操作的目录是Odoo的addons路径(添加自定义模块应放在Odoo同级创建目录)
          • odoo/addons ----- 自带官方应用插件路径
          • odoo/odoo/addons ------ 目录中提供核心功能的base模块
        • 创建模块目录,并包含声明文件
          • 通过命令行,添加一个空的__init__.py文件来初始化模块:
              mkdir -p ~/odoo-dev/custom-addons/library_app
              touch ~/odoo-dev/custom-addons/library_app/__init__.py
            
            • 1
            • 2
          • 添加声明文件,几个重要的属性
          {
              # 插件模块标题字符串
              'name': 'Library Management',
              # 功能描述长文件,通常为RST格式
              'description': 'Manage library book catalogue and lending.',
              # 作者姓名,本处为一个字符串,可以是逗号分隔的一系列姓名
              'author': 'Alan Hou',
              # 一个依赖插件模块列表,在模块安装时会先安装这些插件
              'depends': ['base'],
              # 一个布尔型标记,代表模块是否在应用列表中以APP展现
              'application': True,
          }
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 和Odoo相关的其他属性名,建议使用
            • summary:显示为模块副标题的字符串
            • version:默认为1.0,应遵守版本号规则。建议在模块版本号前加上Odoo版本号,如12.0.1.0
            • license:默认为LGPL-3
            • website:了解模块更多信息的URL,可以帮助人们查看更多文档或提供文件bug和建议跟踪
            • category:带有模块功能性分类字符串,缺省为Uncategorized。
            • sequence:运行模块的顺序,排列运行的顺序
        • 可选择为模块添加一个图标
          • 要添加图标,需要在模块中添加static/description/icon.png文件。
        • 如打算对外发布,为模块选择一个证书
          • Odoo常用的协议是LGPL第三版和AGPL。
          • LGPL授权更广,它允许在无需分享相应源码的情况下对代码进行做出商业修改;AGPL则是一个更严格的开源证书,它要求派生代码及服务托管者分享源码。
    • 添加模型字段时需进行升级。修改Python代码时需要重启服务
    • 修改XML或CSV文件时,需进行升级。在不确定时,同事重启服务并升级模块
  • 添加自动化测试
    • 测试代码文件名应以test-开头,并通过tests/__ init__.py引用。但测试目录(Python子模块)不应在模块的外层__init__.py中引入,因为仅测试执行时才会自动查找和加载它。
    • 测试应放在tests/子目录中,在tests/__ init__.py中添加代码
      from . import test_book
    • 在tests/test_book.py文件中添加实际的测试代码(创建一本新书并检测active字段的值是否正确)
    from odoo.tests.common import TransactionCase
    
    class TestBook(TransactionCase):
        def setUp(self, *args, **kwargs):
            result = super().setUp(*args, **kwargs)
            self.Book = self.env['library.book']
            self.book_ode = self.Book.create({
                'name': 'Odoo Development Essentials',
                'isbn': '879-1-78439-279-6'})
            return result
        def test_create(self):
            "Test Books are active by default"
            self.assertEqual(self.book_ode.active, True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 使用-test-enable参数在安装或升级模块时进行测试
      ~/odoo-dev/odoo/odoo-bin -d dev12 -u library_app --test-enable
    • Odoo服务会在升级的模块中查找tests/子目录并运行。

模型层

  • 创建数据模型
    • 明确Python所需引用的模型目录,在__ init__.py文件中添加:from . import models
    • 要引用创建的Python代码文件,在models/__ init__.py文件中添加:from . import library_book.py(library_book是模型的名字)
    • 在models/library_book.py中加入内容
      from odoo import fileds, models
      
      class Book(models.Model):
          # 模型的标识符
          _name = 'library.book'
          _description = 'Book'
          name = fields.Char('Title', required=True)
          isbn = fields.Char('ISBN')
          active = fields.Boolean('Active?', default=True)
          date_published = fields.Date()
          image = fields.Binary('Cover')
          publisher_id = fields.Many2one('res.partner', string='Publisher')
          author_ids = fields.Many2many('res.partner', string='Authors')
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
  • 设置访问权限
  • 行级权限规则

视图层

  • 添加菜单项
  • 创建表单视图XML文件
  • 业务文件表单视图
  • 添加操作按钮
  • 使用组来组织表单
  • 完整表单视图
  • 添加列表视图和搜索视图

业务逻辑层

  • 添加业务逻辑(通过在模型Python类中编写方法来实现)
  • 网页和控制器
    • QWeb模板是一个视图类型,其中的template元素用于声明QWeb模板
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/230887
推荐阅读
相关标签
  

闽ICP备14008679号