Odoo安装教程10-创建新的插件模块第九讲

模型层

既然 Odoo 已经能识别我们的新模块了,下面就添加一个简单的模型。模型描述业务对象,如商机、销售订单或合作伙伴(用户、供应商等)。模型中有一系列属性,也可定义一些特定业务逻辑。
模型通过 Odoo 模板类派生的 Python 类来实现。它直接与数据库对象对应, Odoo 在安装或升级模块时会自动进行处理。框架中负责这部分的是对象关系映射(ORM -Object Relational Mapping)。
我们的模块是一个图书管理应用,第一个功能就是管理图书目录,目前这是我们唯一需要实现的模型

创建数据模型

Odoo 开发指南中提到模型的 Python 文件应放在 models 子目录中,每个模型有一个对应文件。因此我们在 library_app 模块主目录下创建 models/library_book.py 文件。
“ 小贴士: Odoo 官方编码指南请见 Odoo 官网。另一相关的编码标准文档为 OCA 编码指南。 ”
在使用之前,应告知 Python 所需引用的模型目录,仅需在模块主__init__.py 文件添加:
from . import models
要引用所创建的 Python 代码文件,我们还应添加 models/__init__.py 文件:
from . import library_book
现在我们可以在 models/library_book.py 中加入如下内容:

from odoo import fields, models
class Book(models.Model):
_name = 'library.book'
_description = 'Book'
name = fields.Char('Title', required=True)
isbn = fields.Char('ISBN')
active = fields.Boolean('Active?', default=True)
date_published = fields.Date()
image = fields.Binary('Cover')
publisher_id = fields.Many2one('res.partner', string='Publisher')
author_ids = fields.Many2many('res.partner', string='Authors')

第一行是 Python 代码导入语句,让 Odoo 内核的 models 和 fields 对象在这里可用。紧接着声明了新的模型,它是 models.Model 派生出的一个类。然后_name 属性定义了 Odoo 全局对该模型引用的标识符。注意 Python 类名 Book 与框架无关, _name 的值才是模型的标识符。
“ 小贴士: 仅有模型名使用点号(.) 来分割关键字,其它如模块、 XML 标识符、数据表名等都使用下划线(_)。 ”
注意下面的行都有缩进,对 Python 不熟悉的朋友要知道这很重要:相同缩进代表同一代码块,所以下面的行应采用相同缩进。
_description 属性不是必须的,但为模型记录提供了一个用户友好的名称,可用作更好的用户消息。该行之后定义了模型的不同字段 ,值得一提的是 name 和 active 为特殊字段名。默认在其它模型中引用模型时,会使用 name 字段作为记录的标题。active 字段用于激活记录,默认仅 active 记录会显示。对于日期模型这非常有用,隐藏掉那些用户在日常操作中不再使用的记录(因历史原因仍需保留在数据库中)。在本项目中,用于标识图书是否可用。
再来看看其它字段, date_published 是一个图书出版日的日期字段, image 是一个存储图书封面的二进制字段。还有一些关联字段: publisher_id 是一个出版公司多对一关联, author_ids 是作者多对多关联。都是图书与 partner 模型的关联, partner 模型内置于 Odoo 框架中,用户、公司和地址都存储在这里。我们使用它存储出版商和作者。字段就是这些,要使代码修改生效,需更新模块来触发数据库中相应对象的创建。菜单中还无法访问这一模型,因为我们还没有添加。不过可以通过 Technical 菜单来检查新建模型。访问Settings > Technical > Database Structure > Models(需开启开发者模式),在列表中搜索library.book,然后点击查看模型定义:如查看一切顺利,说明模型和字段都被正常创建,如果你看不到这些,尝试重启服务升级模型。我们还可以看到些未声明的字段,这些是 Odoo 自动为新模型添加的保留字段,这些字段有:
⚫ id 是模型中每条记录的唯一数字标识符
⚫ create_date 和 create_uid 分别为记录创建时间和创建者
⚫ display_name 为所使用的记录提供文本显示,如其它记录引用它,它就会被计算并默认使用
name 字段中的文本
⚫ write_date 和 write_uid 分别表示最后修改时间和修改者
⚫ __last_update 是一个助手字段 ,它不存储在数据库,用于做并发检测

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/

posted @ 2020-05-11 11:27  十年老猿  阅读(189)  评论(0编辑  收藏  举报