经过前面的介绍,我们也确实感觉到Odoo的ORM层的API应该是Odoo技术框架最核心的部分,如果我们翻翻Odoo框架的源码,也会看到models.py那个文件有六七千行的代码,这也说明Odoo的设计者在编写ORM这块是花费了很多精力的。所以我想我们把Odoo的ORM层的API这部分知识掌握了,Odoo框架的神秘面纱也基本上被掀开一大半了。本章将在前面讨论的基础上进一步详细介绍Odoo ORM API的细节。
定义了本模型具体对应SQL表格的名字,比如前面定义的 mymodule.fruits
对应的数据库中的表格名是 public.mymodule_fruits
。
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前面的介绍中也看到了,此外还有创建一些其他的表头字段:
Odoo中的模型一般都还需要 name
字段,用于各种搜索或显示行为。
具体模型的数据是用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 对应的是表单视图。
Many2one
One2many
Many2many
一个工作流模型 在Session模型上都加入了state 字段 : 有三种字段, Draft Confirmed Done
有效的转变有:
Draft → Confirmed Confirmed → Draft Confirmed → Done Done → Draft