Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 6363|回复: 0
打印 上一主题 下一主题

Odoo 8.0深入浅出开发-模块开发基础

[复制链接]

24

主题

26

帖子

125

积分

版主

Rank: 7Rank: 7Rank: 7

积分
125
跳转到指定楼层
楼主
发表于 2016-6-24 22:57:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 南帝 于 2016-6-24 23:02 编辑

构建Odoo模块模块组成

业务对象

业务对象声明为Python类, 由Odoo自动载入.

数据文件

XML或CSV文件格式, 在其中声明了元数据(视图或工作流)、配置数据(模块参数)、演示数据等.

Web控制器

处理Web浏览器发来的requests.

静态web数据

Web用到的图像, CSS或JavaScript文件.

模块结构

一个Odoo模块也是一个Python模块, 存放在一个目录中, 包含一个__init__.py文件, 用于导入其他Python模块.

from . import mymodule

odoo.py提供了一个子命令scaffold可以方便地创建一个空的模块.

$ odoo.py scaffold  

命令执行后, 将会创建一个子目录并且其中包括了Odoo模块所需的一些基本文件.

练习 #1

执行 ./odoo.py scaffold openacademy addons, 在addons目录下创建一个名为openacademy的模块, 生成的目录文件结构如下.

openacademy├── __init__.py├── __openerp__.py├── controllers.py├── demo.xml├── models.py├── security│   └── ir.model.access.csv└── templates.xml

各文件内容请查看文件或查看原文, 然后对__openerp__.py中的几种标识文本进行修改.

对象关系映射

ORM层是Odoo的一个关键组件, 它可以避免大部分的SQL语句编写从而提高扩展性和安全性.

业务对象用派生自Model的Python类(模型)来编写, 该类的_name属性定义了模型在Odoo系统中的名称.

from openerp import modelsclass MinimalModel(models.Model):    _name = 'test.model'字段

字段定义模型能够存储什么以及在哪里存储, 字段在模型类中用属性来定义.

from openerp import models, fieldsclass LessMinimalModel(models.Model):    _name = 'test.model2'    name = fields.Char()通用属性

与模型类似, 字段也可以通过参数传递对其进行设定:

name = field.Char(required=True)

字段的常用属性有:

string (unicode, default: field’s name)

The label of the field in UI (visible by users).

required (bool, default: False)

If True, the field can not be empty, it must either have a default value or always be given a value when creating a record.

help (unicode, default: ‘’)

Long-form, provides a help tooltip to users in the UI.

index (bool, default: False)

Requests that Odoo create a database index on the column

简单字段

字段可以分为两类: 简单字段和关系字段. 前者为原子值, 直接保存在模型对应的数据库表中; 后者连接到其他的记录上(可以是相同的模型也可以是不同的模型).

Boolean, Date, Char这些都是简单字段.

保留字段

Odoo在模型中自动创建并维护一些字段, 这些字段就是保留字段, 这些字段数据不需要也不应该手动去修改.

id (Id)

the unique identifier for a record in its model

create_date (Datetime)

creation date of the record

create_uid (Many2one)

user who created the record

write_date (Datetime)

last modification date of the record

write_uid (Many2one)

user who last modified the record

特殊字段

默认情况下, Odoo要求模型中有一个name字段, 用于显示和搜索, 通过设置_rec_name也可以达到这样的目的.

练习 #2

在openacademy模块中定义一个新的模型Course, openacademy/models.py内容如下:

# -*- coding: utf-8 -*-from openerp import models, fields, apiclass Course(models.Model):    _name = 'openacademy.course'    name = fields.Char(string="Title", required=True)    description = fields.Text()数据文件

Odoo是一个高度数据驱动的系统, 虽然使用Python代码来定制模块行为, 但很多模块数据是在其载入时setup的, 并且有些模块仅仅为Odoo添加数据.

通过数据文件来定义模块数据, 例如可以使用XML文件中的元素定义数据, 每一个元素创建或者更新数据库中的一条记录, 形式如下:

                        {a value}            

model

Odoo模型名.

id

外部ID(External Identifier), 通过它可以引用到记录(并且不需要知道记录所在的数据库ID).

元素

name属性用于确定字段名称(例如description), 该元素的body给出字段的值.

数据文件必须在模块载入清单文件列表中, 也就是__openerp__.py的’data’列表(全部载入)或’demo’列表(只有设定为载入演示数据才会载入)中.

练习 #3

创建一个数据文件来向Course中添加数据, 编辑openacademy/demo.xml, 并确认__openerp__.py的’demo’列表中有该文件.

                        Course 0            Course 0's descriptionCan have multiple lines                                        Course 1                                        Course 2            Course 2's description            动作和菜单

在Odoo中, 动作和菜单都是定义在数据库中的数据记录, 一般通过数据文件来定义.

动作可以由三种方式触发:

点击菜单项(菜单项链接到特定动作) 点击视图上的按钮(如果按钮连接到动作) 作为对象的上下文动作

使用声明一个ir.ui.menu并将其连接到一个action, 可以用下面的形式的代码.

    Ideas    idea.idea    tree,form

注意: action必须先于menu的连接使用定义, 数据文件在载入时顺序地执行, 所以动作的ID必须首先存在于数据库中才能使用.

练习 #4

定义一个新的菜单项访问OpenAcademy课程.

创建openacademy/views/openacademy.xml文件, 并在其中添加动作和菜单.

       Courses            openacademy.course            form            tree,form            <field name="help" type="html">

Create the first course

                                                                                

在__openerp__.py中添加这个数据文件名到’data’.

'data': [        # 'security/ir.model.access.csv',        'templates.xml',        'views/openacademy.xml',    ],

更新模块后可以看到菜单, 操作看看效果.


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-5-3 03:53 , Processed in 0.012883 second(s), 9 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表