业务对象
业务对象声明为Python类, 由Odoo自动载入.
数据文件
XML或CSV文件格式, 在其中声明了元数据(视图或工作流)、配置数据(模块参数)、演示数据等.
Web控制器
处理Web浏览器发来的requests.
静态web数据
Web用到的图像, CSS或JavaScript文件.
模块结构一个Odoo模块也是一个Python模块, 存放在一个目录中, 包含一个__init__.py文件, 用于导入其他Python模块.
from . import mymoduleodoo.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', ],更新模块后可以看到菜单, 操作看看效果.
欢迎光临 Odoo中文网|Odoo实施培训 (http://www.chinaodoo.net/) | Powered by Discuz! X3.2 |