Odoo安装教程12-创建新的插件模块之设置视图层第一讲
视图层
视图层为用户界面的描述,视图用 XML 定义,由网页客户端框架生成数据感知的 HTML 视图。可用菜单项开启渲染视图的操作。比如, Users 菜单项处理一个同样名为 Users 的操作,然后渲染一系列视图。有多种可用视图类型,如 list(因历史原因也称为 tree)列表视图和 form 表单视图,以及包含过滤项的右上角搜索框由 search 搜索视图定义。
Odoo 开发指南写到定义用户界面的 XML 文件应放在 views/子目录中。接下我们来创建图书应用的用户界面。下面我们会逐步改进并更新模块来使更改生效。可以使用–dev=all 参数来在开发时频繁的升级。使用该参数,视图定义会在 XML 文件中直接读取,无需升级模块即可在Odoo 中即刻生效。
“ 小贴士: 如果因 XML 错误升级失败,不必惊慌!仔细阅读输出日志的错误信息,就可以找到问题所在。如果觉得麻烦,注释掉最近编辑的 XML 版块或删除__manifest__.py 中 该 XML 文件,重新更新,服务应该就可正确启动了。 ”
添加菜单项
现在有了存储数据的模型,需要添加到用户界面中。首先要做的就是添加相应菜单项。编辑views/library_menu.xml 文件,在 XML 元素中定义菜单项以及执行的操作:
<!-- Action to open the Book list -->
<act_window id="action_library_book"
name="Library Books"
res_model="library.book"
view_mode="tree,form"
/>
<!-- Menu item to open the Book list -->
<menuitem id="menu_library_book"
name="Books"
parent="menu_library"
action="action_library_book"
/>
用户界面,包括菜单项和操作,存储在数据表中。在安装或升级插件模块时, XML 文件会将这
些定义载入数据库中的数据文件。以上代码是一个 Odoo 数据文件,表示两条添加到 Odoo 的记录:
? 元素定义客户端窗口操作,它按顺序通过启用列表和表单视图打开
library.book 模型
? 定义一个调用前面定义的 action_library_book 操作的顶级菜单项
现在再次升级模块来让修改生效。然后刷新浏览器页面,就可以看到 Library 顶级菜单,并包含
一个子菜单项。点击该菜单会显示一个基本列表视图,记录可通过一个自动生成的表单视图进行编
辑。点击 Create 按钮即可查看,虽然我们还没有定义用户界面视图,自动生成的列表视图和表单视图也可以使用,允许我们马上
编辑数据。
创建表单视图
所有的视图都存储在数据库 ir.ui.view 模型中。为模型添加视图,我们在 XML 文件中声明元素来描述视图,在模块安装时 XML 文件会被载入数据库。
添加 views/book_view.xml 文件来定义表单视图:
<?xml version="1.0"?>
<odoo>
<record id="view_form_book" model="ir.ui.view">
<field name="name">Book Form</field>
<field name="model">library.book</field>
<field name="arch" type="xml">
<form string="Book">
<group>
<field name="name" />
<field name="author_ids" widget="many2many_tags" />
<field name="publisher_id" />
<field name="date_published" />
<field name="isbn" />
<field name="active" />
<field name="image" widget="image" />
</group>
</form>
</field>
</record>
</odoo>
这个 ir.ui.view 记录有三个字段值: name, model 和 arch。另一个重要元素是记录 id,它定义
了一个可在其它记录中引用的 XML ID 标识符。这是 library.book 模型的视图,名为 BookForm。这个名称仅用于提供信息,无需唯一,但应易于分辨所引用的记录。其实可以完全省略name,这种情况下会自动按模型名和视图类型来生成。
最重要的字段是 arch,它包含了视图的定义,在 XML 代码中我们做了高亮显示(博客主题问题无法显示)。
此处中包含了要在表单中显示的字段。这些字段会自动使用默认的组件,如 date 字段使用日期选择组件。有时我们要使用不同的组件,如以上代码中的 author_ids 使用了显示标签列表的组件, image 字段使用处理图片的相应组件。有关视图元素的详细说明请见第十章后台视图。
不要忘记在声明文件的 data 中加入新建文件,否则我们的模块将无法识别到并加载该文件:
‘data‘: [
‘security/library_security.xml‘,
‘security/ir.model.access.csv‘,
‘views/library_menu.xml‘,
‘views/book_view.xml‘,
],
要使修改载入 Odoo 数据库就需要更新模块。需要重新加载页面来查看修改效果,可以再次点
击菜单项或刷新网页(大多数浏览器中快捷键为 F5)。