宜兴通达竭诚为您服务。

ODOO12图书项目视图层

2020-10-14 13:10:00     作者: Administrator     来源:互联网,版权归作者所有     浏览次数: 39     文字大小:【】【】【

你没有登录,文章中的图片无法正常显示,请点击登录

视图层为用户界面的描述,视图用 XML 定义,由网页客户端框架生成数据感知的 HTML 视图。可用菜单项开启渲染视图的操作。比如,Users 菜单项处理一个同样名为 Users 的操作,然后渲染一系列视图。有多种可用视图类型,如 list(因历史原因也称为 tree)列表视图和 form表单视图,以及包含过滤项的右上角搜索框由 search 搜索视图定义。

Odoo 开发指南写到定义用户界面的 XML 文件应放在views/子目录中。接下我们来创建图书应用的用户界面。下面我们会逐步改进并更新模块来使更改生效。

添加菜单项
现在有了存储数据的模型,需要添加到用户界面中。首先要做的就是添加相应菜单项。编辑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 的记录:

  • <act_window>元素定义客户端窗口操作,它按顺序通过启用列表和表单视图打开library.book 模型

  • <menuitem>定义一个调用前面定义的action_library_book操作的顶级菜单项

现在再次升级模块来让修改生效。然后刷新浏览器页面,就可以看到Library顶级菜单,并包含一个子菜单项。点击该菜单会显示一个基本列表视图,记录可通过一个自动生成的表单视图进行编辑。点击创建按钮即可查看


虽然我们还没有定义用户界面视图,自动生成的列表视图和表单视图也可以使用,允许我们马上编辑数据。
创建表单视图

所有的视图都存储在数据库ir.ui.view模型中。为模型添加视图,我们在 XML文件中声明<record>元素来描述视图,在模块安装时 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 模型的视图,名为Book Form。这个名称仅用于提供信息,无需唯一,但应易于分辨所引用的记录。其实可以完全省略 name,这种情况下会自动按模型名和视图类型来生成。

最重要的字段是arch,它包含了视图的定义,在 XML 代码中我们做了高亮显示。<form>标签定义了视图类型并包含视图结构。

此处<form>中包含了要在表单中显示的字段。这些字段会自动使用默认的组件,如 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)。


业务文件表单视图
上面的部分创建了一个基础表单视图,还可以做一些改进。对于文件模型,Odoo 有一个模拟纸张的展示样式,表单包含两个元素:<header>来包含操作按钮和<sheet>来包含数据字段。可以修改上一部分的基础<form>定义为:

<form string="Book">

<header>

<!-- Buttons will go here -->

</header>

<sheet>

<!-- Content goes here: -->

<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>

</sheet>

</form>

添加操作按钮

表单可带有执行操作的按钮。这些按钮可用于运行窗口操作,如打开另一个表单或执行模型中定义的 Python 方法。按钮可以放在表单的任意位置,但对于文件样式表单,推荐的位置是<header>中。

我们的应用会添加图书 ISBN,和一个用于检测 ISBN 有效性的按钮。代码将放在 Book 模型中,我们将该方法命名为button_check_isbn()。虽然还未创建该方法,我们现在可以在表单中先添加相应按钮

<header>

<button name="button_check_isbn" type="object"

string="Check ISBN" />

</header>

一个按钮的基本属性有:

  • string:定义按钮显示文本

  • type:执行的操作类型

  • name:操作的标识符

  • class:应用 CSS 样式的可选属性,与 HTML 相同





使用组来组织表单
<group>标签可用于组织表单内容。在<group>元素内加<group>会在外层组中创建一个两列布局。推荐在group 元素中添加 name 属性,更易于其它模块对其进行继承。我们使用该标签来组织内容,修改<sheet>内容如下:

<sheet>

<group name="group_top">

<group name="group_left">

<field name="name" />

<field name="author_ids" widget="many2many_tags" />

<field name="publisher_id" />

<field name="date_published" />

</group>

<group name="group_right">

<field name="isbn" />

<field name="active" />

<field name="image" widget="image" />

</group>

</group>

</sheet>


完整表单视图
此时library.book的表单视图代码如下:

<form>

<header>

<button name="check_isbn" type="object"

string="Check ISBN" />

</header>

<sheet>

<group name="group_top">

<group name="group_left">

<field name="name" />

<field name="author_ids" widget="many2many_tags" />

<field name="publisher_id" />

<field name="date_published" />

</group>

<group name="group_right">

<field name="isbn" />

<field name="active" />

<field name="image" widget="image" />

</group>

</group>

</sheet>

</form>

按钮还无法使用,需要先添加业务逻辑。


添加列表视图和搜索视图

以列表模式显示模型需要使用视图。树状视图可以按层级显示,但大多数情况下仅需显示为普通列表。

可以在book_view.xml文件中添加<tree>视图:

<record id="view_tree_book" model="ir.ui.view">

<field name="name">Book List</field>

<field name="model">library.book</field>

<field name="arch" type="xml">

<tree>

<field name="name"/>

<field name="author_ids" widget="many2many_tags" />

<field name="publisher_id"/>

<field name="date_published"/>

</tree>

</field>

</record>

以上定义了一个含有四列的列表:name, author_ids, publisher_id和 date_published。


在该列表的右上角,Odoo 显示了一个搜索框。搜索的字段和可用过滤器也由视图定义。同样还在book_view.xml文件中添加:

<record id="view_search_book" model="ir.ui.view">

<field name="name">Book Filters</field>

<field name="model">library.book</field>

<field name="arch" type="xml">

<search>

<field name="publisher_id"/>

<filter name="filter_inactive"

string="Inactive"

domain="[('active','=',True)]"/>

<filter name="filter_active"

string="Active"

domain="[('active','=',False)]"/>

</search>

</field>

</record>

<field>元素定义在搜索框中输入搜索的字段,这里添加了publisher_id自动提示出版商字段。<filter>元素添加预定义过滤条件,用户通过点击来切换,它使用了特殊的语法.


视频演示:

http://www.tderp.com/download/details/odoo12-857

http://ctdrive.tderp.com/file/13502532-467004956

相关文章 评论

服务原则及地区范围

宜兴通达团队,在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我团队愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达团队提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: