这段文字内容是关于Odoo OpenERP 8.0开发基础教程的连载一,主要介绍了Odoo服务器的启动和停止、模块的构建、模块的组成、模块结构、对象关系映射(ORM)、模块的字段以及数据文件等多个方面的知识点。以下是对这些内容的详细讲解:
1. 启动和停止Odoo服务器
Odoo使用客户机/服务器体系结构,其中客户端的Web浏览器通过RPC访问Odoo服务器。服务器可以通过以下命令启动:
odoo.py
在某些情况下,可能需要提供文件的全路径。服务器可以通过在终端按两次`Ctrl+C`或者使用`kill`命令终止相应的服务器进程来停止。
2. 构建Odoo模块
Odoo模块可以添加全新的业务逻辑到Odoo系统,或者改变和扩展现有的业务逻辑。模块可以创建新的业务对象、数据文件、网络控制器、静态网页数据等。
2.1 模块的组成
一个Odoo模块可以包含以下元素:
- 业务对象(Business Objects):声明为Python类,这些资源会根据他们的配置被Odoo自动持久化。
- 数据文件(Data Files):XML或CSV文件中声明元数据(视图或工作流)、配置数据(模块参数)、演示数据等。
- 网络控制器(Web controllers):处理来自Web浏览器的请求。
- 静态网页数据(Static web data):使用Web界面或网页的图像、CSS或JavaScript文件。
2.2 模块结构
每个模块都是模块目录中的一个目录。模块目录使用`--addons`路径选项指定。模块由其Manifest文件声明,这是一个包含Python字典的文件,声明模块的各种元数据,如模块名称、说明、依赖的Odoo模块列表、引用的数据文件等。
Manifest文件的一般结构如下:
{ 'name': "MyModule", 'version': '1.0', 'depends': ['base'], 'author': "Author Name", 'category': 'Category', 'description': """ Description text """, 'data': [ 'mymodule_view.xml', ], 'demo': [ 'demo_data.xml', ], }
模块也是一个名为`__init__.py`的Python包,用于引入模块的各种Python文件。例如,如果模块只有一个文件`mymodule.py`,`__init__.py`文件内容可能如下:
import mymodule
Odoo提供了一个命令来创建空模块:
odoo.py scaffold openacademy addons
这个命令会创建一个名为`openacademy`的模块目录,并自动生成模块的各种文件。
2.3 对象关系映射(ORM)
Odoo的ORM层避免了大部分手工编写的SQL,并提供可扩展性和安全性服务。业务对象被声明为扩展模式,它们集成到自动化的系统持久性Python类。模型可以通过在其定义中进行配置设置多个属性。最重要的属性是`_name`,它定义了模块在Odoo系统中的名称。
一个最小的模型定义如下:
from openerp import models class MinimalModel(models.Model): _name = 'test.model'
2.5 模块的字段(Fields)
字段定义了模型可以保存什么、存在哪里。字段定义为模型类的属性:
from openerp import models, fields class LessMinimalModel(models.Model): _name = 'test.model2' name = fields.Char()
字段可以通过配置属性进行设置,例如:
name = fields.Char(required=True)
常见的属性包括:
- string:字段在UI上的标签。
- required:字段是否必须。
- help:提供帮助提示。
- index:请求Odoo在数据库上对列创建索引。
简单字段(Simple Fields)
简单字段是直接存储在模块表中的原子值,例如`Boolean`、`Date`、`Char`等。
保留字段(Reserved Fields)
Odoo在所有模型中创建了一些保留字段,这些字段由系统管理,不能被写入:
- id:记录的唯一标识符。
- create_date:记录的创建日期。
- create_uid:创建记录的用户。
- write_date:记录的最后修改日期。
- write_uid:最后修改记录的用户。
特殊字段(Special Fields)
默认情况下,Odoo要求所有字段都有一个`name`字段以便执行各种显示和查询动作。可以通过设置`rec_name`来覆盖这个字段。
作业:定义一个模型
定义一个新数据模块`Course`在`openacademy`中。一个课程有名称`title`和描述。课程必须有名称`title`。编辑`openacademy/models.py`如下:
from openerp import models, fields, api class Course(models.Model): _name = 'openacademy.course' name = fields.Char(string="Title", required=True) description = fields.Text()
数据文件(Data Files)
Odoo是一个数据驱动系统,模块的部分数据在加载时被设置。数据文件通过XML文件声明,每个``元素创建或更新一条数据库记录。
例如,定义演示数据:
<record model="openacademy.course" id="course0"> <field name="name">Course 0</field> <field name="description">Course 0's description</field> </record>
数据文件必须通过Manifest文件声明以便加载,可以定义在`data`列表(总是加载)或`demo`列表(仅在演示模式加载)。
作业:定义演示数据
创建一个带几条演示数据填充的`courses`模块,编辑`openacademy/demo.xml`文件如下:
<record model="openacademy.course" id="course0"> <field name="name">Course 0</field> <field name="description">Course 0's description</field> </record> <record model="openacademy.course" id="course1"> <field name="name">Course 1</field> <field name="description">Course 1's description</field> </record>
通过这些步骤,你可以创建一个简单的Odoo模块,并定义模型和演示数据。接下来,你可以尝试安装这个模块到Odoo中,查看效果。