odoo——入门教程整理(一)

本文是根据网上的odoo教程整理出来的,具体内容为创建一个待办事项的odoo应用

参考资料:

  1. B站视频——odoo开发入门与精通
  2. Alan Hou的个人博客
  3. csdn博客——滴霸哥
    感谢大哥们的经验分享

准备工作

本文使用环境为 odoo13 + python3.7 + Pycharm。系统为MscOS Majave。windows某些地方需要修改为对应的目录格式或者命令 阅读之前 请确认已安装好odoo,本文不涉及安装知识。安装请参考官方安装文档

Pycharm的配置

安装好的odoo后 打开 PyCharm 选择 Create New ProjectLocation 选择 odoo的安装目录,环境建议选择本机环境 Existing interpreter odoo_pycharm_env_conf 点击 Create 创建 Project 创建好工程以后 在Pycharm 中选择 Run>Edit Configurations 会弹出下面的设置界面bug_config 点击左上角的 ”+“ 号添加debug设置,选择python,script path 选择odoo目录下的 odoo-bin 文件——这是odoo的启动文件。自定义 Name以后,点击 OK 添加debug设置,方便以后调试使用。

启动odoo

配置好debug 以后我们就可以直接点击右上角的Run或者 Debug来启动odoo。点击后出现下面界面为启动成功run_odoo 用浏览器访问localhost:8069 就能使用odoo了,第一次进入时会提示创建数据库以及用户。创建好以后就会显示odoo的界面 odoo

创建自己的Odoo应用

在Pycharm中点击终端 Termianl 运行 ./odoo-bin help可以查看 可用的odoo命令 terminal_odoo 其中 sacffold 为创建odoo模块,在终端中输入命令 ./odoo-bin sacffold todo myaddons, todo 为需要创建的模块名称 myaddons 为模块的存放目录。为了方便管理 新建了一个 myaddons 文件夹用于存放 个人的odoo应用,系统应用默认存放在 addons 文件夹中。 运行命令以后,在myaddons文件夹下会自动生成todo模块的基础文件,目录如下: todo_model_tree

我们先简单修改一下文件来得到一个可以运行的odoo应用。

manifest.py

__manifest__.py主要包括应用的信息及配置。

删除data属性下security/ir.model.access.csv的注释。这是权限文件,不删除注释的话,即使安装了模块,也无法在左上角的下拉菜单中显示你的应用。 添加属性 applicationTrue 用于让你创建的模块应用可以在应用界面可以显示

# -*- coding: utf-8 -*-
{
    'name': "todo",

    'summary': """
        待办事项
    """,

    'description': """
        Long description of module's purpose
    """,

    'author': "cassi",
    'website': "http://www.cassi.top",

    # Categories can be used to filter modules in modules listing
    # Check https://github.com/odoo/odoo/blob/13.0/odoo/addons/base/data/ir_module_category_data.xml
    # for the full list
    'category': 'Uncategorized',
    'version': '0.1',

    # any module necessary for this one to work correctly
    'depends': ['base'],

    # always loaded
    'data': [
        'security/ir.model.access.csv', # 这里我们需要去掉注释,不然安装模块以后,应用并不会显示在左上角下拉菜单中
        'views/views.xml',
        'views/templates.xml',
    ],
    # only loaded in demonstration mode
    'demo': [
        'demo/demo.xml',
    ],
    'application': True,  # 默认没有此配置,表示是模块是否在应用列表显示
}

models.py

我们在这个文件中声明一个TodoTask类 ,对应我们的待办事项,包含名称以及是否完成两个属性。_name属性请牢记,应用中很多地方会用到,_description推荐加上模块功能的描述。nameis_done为我们自定义的功能属性对应名称以及是否完成。

# -*- coding: utf-8 -*-

from odoo import models, fields, api

# class todo(models.Model):
#     _name = 'todo.todo'

#     name = fields.Char()
#     value = fields.Integer()
#     value2 = fields.Float(compute="_value_pc", store=True)
#     description = fields.Text()
#
#     @api.depends('value')
#     def _value_pc(self):
#         self.value2 = float(self.value) / 100


class TodoTask(models.Model):
    _name = "todo.task"
    _description = "待办事项"

    name = fields.Char(string="待办事项名称")
    is_done = fields.Boolean(string="是否完成")

ir.model.access.csv

权限文件,注意name需要与你models.py中的name保持一致

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_todo_task,todo.task,model_todo_task,,1,1,1,0

views.xml

视图文件。odoo并不像我们习惯的网页开发那样去自己写html代码,视图文件都是都在xml文件中加载。我们需要在xml文件中定义各种视图、动作以及菜单列表。修改文件如下

<odoo>
  <data>
    <!-- explicit list view definition -->

    <record model="ir.ui.view" id="todo_task_list">
      <field name="name">Todo Task List</field>
      <field name="model">todo.task</field>
      <field name="arch" type="xml">
        <tree>
          <field name="name"/>
          <field name="is_done"/>
        </tree>
      </field>
    </record>
    <record model="ir.ui.view" id="todo_task_form">
      <field name="name">Todo Task Form</field>
      <field name="model">todo.task</field>
      <field name="arch" type="xml">
        <form>
          <sheet>
            <group>
              <group>
                <field name="name"/>
              </group>
              <group>
                <field name="is_done"/>
              </group>
            </group>
          </sheet>
        </form>
      </field>
    </record>


    <!-- actions opening views on models -->
    <record model="ir.actions.act_window" id="act_todo_task_win">
      <field name="name">Todo Task Window</field>
      <field name="res_model">todo.task</field>
      <field name="view_mode">tree,form</field>
    </record>

    <!-- server action to the one above -->
    <!--
    <record model="ir.actions.server" id="todo.action_server">
      <field name="name">todo server</field>
      <field name="model_id" ref="model_todo_todo"/>
      <field name="state">code</field>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "tree,form",
          "res_model": self._name,
        }
      </field>
    </record>
    -->

    <!-- Top menu item -->
    <menuitem name="todo" id="menu_root"/>

    <!-- menu categories -->
    <menuitem name="Todo Manager" id="menu_todo_manager" parent="menu_root"/>
    <!--
    <menuitem name="Menu 2" id="todo.menu_2" parent="todo.menu_root"/>
    -->
    <!-- actions -->

    <menuitem name="Todo Task" id="menu_todo_task_list" parent="menu_todo_manager"
              action="act_todo_task_win" />
    <!--
    <menuitem name="Server to list" id="todo" parent="todo.menu_2"
              action="todo.action_server" />
    -->
  </data>
</odoo>

更新应用列表

重启 odoo-bin 然后在先在应用选项中点击 刷新本地模块列表,然后在搜索框中搜索todo 就会显示我们创建的todo应用 to_app 点击安装后,就可以在左上角的下拉菜单中看到todo应用 todo_app_1 进入应用就可以看到odoo的界面 以及我们设置的 待办事项名称及是否完成两个属性,并进行正常的增删改查 todo_app_2