ODOO12图书项目视图层

视图层为用户界面的描述,视图用 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文件中声明元素来描述视图,在模块安装时 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 代码中我们做了高亮显示。标签定义了视图类型并包含视图结构。
此处中包含了要在表单中显示的字段。这些字段会自动使用默认的组件,如 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 有一个模拟纸张的展示样式,表单包含两个元素:

来包含操作按钮和来包含数据字段。可以修改上一部分的基础定义为:

<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 方法。按钮可以放在表单的任意位置,但对于文件样式表单,推荐的位置是

中。
我们的应用会添加图书 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 元素中添加 name 属性,更易于其它模块对其进行继承。我们使用该标签来组织内容,修改内容如下:
<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文件中添加视图:

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

元素定义在搜索框中输入搜索的字段,这里添加了publisher_id自动提示出版商字段。元素添加预定义过滤条件,用户通过点击来切换,它使用了特殊的语法.
在这里插入图片描述
视频演示:
http://www.tderp.com/download/details/odoo12-857
http://ctdrive.tderp.com/file/13502532-467004956

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

r_nznf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值