Skip to Content

Odoo 基础开发功能连载 1

这段文字内容是关于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中,查看效果。

Odoo 基础开发功能连载 1
6776, Administrator April 30, 2015
Tags
Archive