Odoo 8.0深入浅出开发教程(九) Odoo模型层详解

11 Odoo模型层详解

经过前面的介绍,我们也确实感觉到Odoo的ORM层的API应该是Odoo技术框架最核心的部分,如果我们翻翻Odoo框架的源码,也会看到models.py那个文件有六七千行的代码,这也说明Odoo的设计者在编写ORM这块是花费了很多精力的。所以我想我们把Odoo的ORM层的API这部分知识掌握了,Odoo框架的神秘面纱也基本上被掀开一大半了。本章将在前面讨论的基础上进一步详细介绍Odoo ORM API的细节。

11.1 _name

定义了本模型具体对应SQL表格的名字,比如前面定义的 mymodule.fruits 对应的数据库中的表格名是 public.mymodule_fruits 。

11.2 各个表头属性

class Fruits(models.Model):
    _name = 'mymodule.fruits'

    name = fields.Char()

如上所示这样定义的类的一个 name 属性就对应SQL中的一个表头名,即名叫 name 的一列。这个我们在前面的pgadmin3中看到了的。

然后上面的 fields.Char() 具体定义了一个字符串输入字段,类似的还有 fields.Boolean 布尔值; fields.Integer 整数值; fields.Float 浮点数值; fields.Text 和Char类似,但通常用于多行文本字段输入; fields.Selection 几个值的选择; fields.Html ; fields.Date ; fields.Datetime 等。这些都是所谓的简单字段输入,此外还有一种关系字段,其是用于描述表格之间的关系的(相同模型或者不同模型)。

fields.Char() 函数可以接受一些可选参数,比如 string 表示本模型为用户可见的名字;required 接受一个布尔值,默认是False,如果是True,则该字段不可为空值,其要某有个默认值要某有个设定值; help 在用户UI界面下的帮助信息; index 布尔值,默认是False,如果为True则要求在数据库中为这列创建一个索引(index)。

然后我们在pgadmin3前面的介绍中也看到了,此外还有创建一些其他的表头字段:

  • id 在表格中一条记录的独特id
  • create_date 创建日期
  • create_uid 谁创建的
  • write_date 最后修改日期
  • write_uid 谁修改的

11.3 name字段

Odoo中的模型一般都还需要 name 字段,用于各种搜索或显示行为。

11.4 具体模型的数据

具体模型的数据是用XML文件来声明的,如下所示:

<openerp>
    <data>
        <record id="apple" model="mymodule.fruits">
            <field name="name">apple</field>
        </record>
    </data>
</openerp>

这里的 record 元素你可以理解为SQL表格的一条记录,或者Odoo模型具体的一个实例一个对象。然后 id 属性特别标记了这条记录(说可被外调用,具体还不清楚); model 属性就是这个对象具体对应那个模型。

然后里面的 field 元素你可以看作某条记录具体的某个 name 表头的字段, field body 里面就放着这个字段的值。

这里的record在视图中对应的是basic view;此外还有 tree 对应的是列表视图;此外还有 form 对应的是表单视图。

11.5 模型间的关系

Many2one

One2many

Many2many

11.6 工作流

一个工作流模型 在Session模型上都加入了state 字段 : 有三种字段, Draft Confirmed Done

有效的转变有:

Draft → Confirmed Confirmed → Draft Confirmed → Done Done → Draft

12 Odoo视图层详解

你可能感兴趣的:(python,odoo)