宜兴通达竭诚为您服务。

ODOO12图书项目修改视图和数据

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

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

模块中视图和其它数据构件也可通过继承来修改。就视图而言,通常需要添加功能。视图的展示结构在 arch 字段中使用 XML定义。这一 XML 数据可通过定位到所需修改的地方来进行继承,然后声明需执行的操作,如在该处添加 XML 元素。对于剩余的数据元素,它们代表写入数据库中的记录,继承模型可通过写操作来修改它们的值。

继承视图

表单、列表和搜索视图通过arch XML结构定义。要继承视图,就要一种修改 XML 的方式,也即定位 XML 元素然后对该处进行修改。视图继承的 XML 记录和普通视图中相似,多一个 inherit_id属性来引用所要继承的视图。下面我们来继承图书视图并添加is_available字段。

首先要查找待继承的视图的XML ID,通过设置>技术>用户界面>视图菜单来查看。图书表单的XML ID是library_app.view_form_book。然后还要找到要插入修改的XML元素,我们在 ISBN 字段之后添加Is Available?通常通过name 属性定位元素,此处为<field name=”isbn” />。


我们添加views/book_view.xml文件来继承 Partner 视图,加入如下内容:

<?xml version="1.0"?>

<odoo>

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

<field name="name">Book: add Is Available? field</field>

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

<field name="inherit_id" ref="library_app.view_form_book"/>

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

<field name="isbn" position="after">

<field name="is_available" />

</field>

</field>

</record>

</odoo>

以上代码中,我们高亮显示了继承相关的元素。inherit_id记录字段通过 ref 属性指向继承视图的外部标识符,我们将在后面讨论外部标识符详情。视图使用 XML 定义并存储在结构字段 arch 中。要继承一个视图,先定位要扩展的节点,然后执行要做的操作,如添加 XML 元素。

定位节点的最简单方法是使用唯一标识属性,通常是 name。然后添加定位属性,声明要做的修改。本例中继承节点是name=”isbn”元素,修改是在选定元素后加一段 XML:

<field name="isbn" position="after">

<!-- Changed content goes here -->

</field>

除string 属性外的任意 XML 元素和属性可作为继承节点,字符串属性会被翻译成用户所使用的语言,因此不能作为节点选择器。

一旦 XML 节点被选为继承点,需要指明要执行的继承操作。这通过 position 属性实现:

  • inside(默认值):在所选节点内添加内容,这一节点应是<group>或<page>一类的容器

  • after:在选定节点之后向父节点添加内容

  • before:在选定节点之前向父节点添加内容

  • replace:替换所选节点。若使用空元素则会删除该元素。Odoo 之后还允许使用其它标记来包裹元素,通过在内容中使用$0来表示被替换的元素。

  • attributes:修改匹配元素属性值。内容中应包含带有一个或多个  <attribute name=”attr-name”>value</attribute>元素。如<attribute name=”invisible”>True</attribute>,若不带内容,如<attribute name=”invisible” />则 attribute 会从所选元素中删除。

除了attributes定位,上述定位符可与带position=”move”的子元素合并。效果是将子定位符目标节点移到父定位符目录位置。

例如:

<field name="target_field" position="after">

<field name="my_field" position="move"/>

</field>

其它视图类型,如列表和搜索视图,也有 arch 字段,可以表单视图同样的方式被继承。在声明文件data 中加入该视图文件并更新模块即可:

'data': [

'views/book_view.xml',

],


使用 XPath 选取继承点

有时可能没有带唯一值的属性来用作 XML 节点选择器。在所选元素没有 name 属性时可能出现这一情况,如<group>、<notebook>或<page>视图元素。另外就是有多个带有相同 name 属性的元素,比如在看板 QWeb 视图中相同字段可能在同一 XML 模板中被多次包含。

在这些情况下我们就需要更高级的方式来定位待扩展 XML 元素。定位 XML 中元素的一种自然方式是 XPath 表达式。以上一篇文章中定义的 Book 表单视图为例,定位<field name=”isbn”>元素的 XPath 表达式是//field[@name]=’isbn’。该表达式查找 name 属性等于 isbn 的<field>元素。

前一部分对图书表单视图继承的 XPath 写法是:

<expr="//field[@name='isbn']" position="after">

<field name="is_available" />

</xpath>

XPath 语法的更多知识请见 Python 官方文档。

如果 XPath 表达式匹配到了多个元素,仅会选取第一个作为扩展目录。所以表达式应越精确越好,使用唯一属性。name 属性最易于确保找到精确元素作为扩展点,因此在创建视图 XML 元素时添加唯一标识符就非常重要。

修改数据

普通数据记录不同于视图,它没有 XML arch 结构,也不能使用 XPath 来进行扩展。但还是可以通过替换字段值来进行修改。

<record id=”x” model=”y”>数据加载元素实际是对 y 模型进行插入或更新操作。若不存在记录 x,则被创建,否则被更新/覆盖。其它模块中的记录可通过<module>.<identifier>全局标识符访问,因此可以在我们的模块中重写其它模块中已写入的数据。

举个例子,我们将 User 安全组的名称修改为 Librarian,对应修改library_app.library_group_user记录。添加library_member/security/library_security.xml并加入如下代码:

<odoo>

<!-- Modify Group name -->

<record id="library_app.library_group_user" model="res.groups">

<field name="name">Librarian</field>

</record>

</odoo>

这里我们使用了一个<record>元素,仅写了 name 字段。可以认为这是对所选字段的一次写操作。

在声明文件data 中加入security/library_security.xml并更新模块即可看到效果。

'data': [

'security/library_security.xml',

'views/book_view.xml',

],













视频演示:

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

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

相关文章 评论

服务原则及地区范围

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

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

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

宜兴地区提供上门服务:

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