树视图
当我们在一个列表视图中和查询页面中工作时将使用这些视图(为了马上看到多种资源)。这些视图比form表单简单多了并有更少的选项。
查询视图
查询视图是OpenERP 6.0以上的新功能。其创建了定制化的查询面板,并且与表单视图声明很相似,除了试图类型和根元素变为search,而不是form
下面的是查询视图中支持的一列新元素和功能。
Group tag(组标签)
不像组元素,查询视图分组支持一行中不限定数量的条件(字段或过滤器),并且仅适用以下属性。
<group expand="1" string="Group By">
<filter string="Users" icon="terp-project" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
<separator orientation="vertical"/>
<filter string="Deadline" icon="terp-project" domain="[]" context="{'group_by':'date_deadline'}"/>
</group>
上述是一个扩展分组
Filter tag(过滤器标签)
过滤器在查询面板过滤器元素中以一个切换按钮显示。过滤器元素能在当前领域或者查询视图上下文中添加新的值。过滤器也可以作为一个子元素添加,指明它们专门满足这个过滤器(这种情况下按钮图标将很小)
在下面的图片中,红色部分包含了表单顶层的过滤器,同时蓝色部分高亮显示了一个字段和其子过滤器。
<filter string="Current" domain="[('state','in',('open','draft'))]" help="Draft, Open and Pending Tasks" icon="terp-project"/>
<field name="project_id" select="1" widget="selection">
<filter domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-project"/>
</field>
Group by (分组)
<filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
上面的过滤器分组记录了共享了同样的project_id值。分组是延迟加载的,所以当分组扩展时,内部分组才加载。分组头行包含了那个分组中所有记录的普通值,并且视图中当前显示的数字字段被那个分组的值得总和替代。
它也可能通过指定一列字段而不是一个字符串根据多个值分组。这种情况下将显示嵌套分组。
<filter string="Project" icon="terp-project" domain="[]" context="{'group_by': ['project_id', 'user_id'] }"/>
Fileds(字段)
视图中的字段元素用于获取用户提供的值来搜索。结果是,作为分组元素,其与表单视图字段不同。
为了获取@context 或@filter_domain字段的值,可以使用变量self:
<field name="location_id" string="Location"
filter_domain="['|',('location_id','ilike',self),('location_dest_id','ilike',self)]"/>
或者
<field name="journal_id" widget="selection"
context="{'journal_id':self, 'visible_id':self, 'normal_view':False}"/>
Range fileds(date,datetime,time)区间字段
区间字段由两个小部件组成(from和and),而不是仅仅一个。
这就导致了一些特性(与非区间字段对比):
因为一个区间字段的每个输入部件可能为空(但字段本身任旧有效),当使用self的时候必须注意:其有两个字符串的关键字”from“和”to“,但是了这些关键字的任何一个可能完全没有或者设置值为false。
Actions for Search view(搜索视图的动作)
声明了一个搜索视图后,它将自动用于同一模式下的所有树形视图。如果单一模式下有多个搜索视图,将使用有最高优先级的那个(按照最低排序)。另一个选项是明确地选择你想使用的搜索视图,通过设置那个动作的search_view_id 字段。
另外,为了在action的上下文中传递默认的表单值,Operator6.0现在支持为查询视图传递初始化值。上下文关键字需要匹配search_default_XXX格式,xxx可能与查询视图中的一个字段或者过滤器的名字关联(由于过滤器的name属性不是必须的,这里只是为了过滤器有一个精确的名字设置)。这个值应该是查询字段的初始化值,或者仅仅是过滤器的布尔值来切换它们。
<record id="action_view_task" model="ir.actions.act_window">
<field name="name">Tasks</field>
<field name="res_model">project.task</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,gantt,graph</field>
<field eval="False" name="filter"/>
<field name="view_id" ref="view_task_tree2"/>
<field name="context">{"search_default_current":1,"search_default_user_id":uid}</field>
<field name="search_view_id" ref="view_task_search_form"/>
</record>
Custom Filters (定制化过滤器)
6.0版本,所有的查询视图有定制化查询过滤器功能,如下所示。用户可以使用当前模式的可用字段的一些,使用AND/OR操作符连接来定义自己的过滤器。也可能保存任何查询上下文(当前匹配的领域和上下文值得组合)作为定制的过滤器,可以在任何时候调用。过滤器也可以在用户主页中直接简化变成可用的。
在上述例子中,我们使用Salesman = Demo user 和 Country = Belgium 过滤partner。我们可以保存查询条件作为一个快捷键或者以过滤器保存。
过滤器是用户指定的并且可以在过滤器的下拉列表中借助过滤器管理选项修改
Graph views(图表过滤器)
对于表单类型的视图,图标是一种新的视图模式。例如,如果线上的销售订单必须以列表或者图标显示,在action(线上打开销售订单的动作)中如此定义。不要这样设置视图模式("tree,form,graph" or "form,graph”)-必须是“graph,tree”来首先显示图标或者“tree,graph”来首先显示列表。(视图模式对于“form,tree”视图多余的并且应该有一个独立的菜单项)。
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
view_type(视图类型)
tree = (tree with shortcuts at the left), form = (switchable view form/list)
view_model(模式)
tree,graph : sequences of the views when switching(转换时视图顺序)
稍后,用户将可以从一个视图转换到另一个视图。不像表单和树,OpenERP不能为图标类型根据需要自动创建视图,所以了你必须定义了这个图表的视图
<record model="ir.ui.view" id="view_order_line_graph">
<field name="name">sale.order.line.graph</field>
<field name="model">sale.order.line</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Sales Order Lines">
<field name="product_id" group="True"/>
<field name="price_unit" operator="*"/>
</graph>
</field>
</record>
图表视图
图表类型视图只是图表的一列字段
图标签
图表的默认类型是一个饼图--可以通过以下代码变成条形饼图,将<graph string="Sales Order Lines">改为<graph string="Sales Order Lines" type="bar"> 。你也可能改变这个操作方向 垂直或者水平方向。
例子
<graph string="Sales Order Lines" orientation="horizontal" type="bar">
Field tag (字段标签)
第一个字段是X轴。第二个是Y轴,第三个是Z轴,这是对应三维图的。
定义对象的统计
--------------------
-------------------
计算对象统计的最简单的方法是:
你可以获取所有模块表单的一个例子:例如,report_crm
控制视图动作
当定义一个视图,下面的元素可以添加到视图的打开的元素中。(比如<form>,<tree>...)
create
设置为false来隐藏那个连接/按钮,允许你创建了一个新的记录
delete
设置为false来隐藏连接/按钮,允许你移除一个记录。
edit
设置false来隐藏连接/按钮,允许你编辑一个记录。
这些属性对于form,tree,kanban和gantt视图都是可用的。它们通常根据用户的访问权限自动加载,但是了可以在视图定义中全局性强制设置。针对这些属性一个可能的使用情况是在一个表单视图内定义一个针对one2many关系的内部树视图,在其内部不能添加或者移除先关的记录,但是可以编辑存在的(可以通过另一种方式创建,比如一个wizard)。
日历视图为数据提供了时间轴/日程安排的视图。
View Specification(视图规范)
这里是一个视图例子:
<calendar color="user_id" date_delay="planned_hours" date_start="date_start" string="Tasks">
<field name="name"/>
<field name="project_id"/>
</calendar>
这里是calendar标签支持的属性。
String :视图的标题字符串
date_start:datetime字段为日历条目指定开始时间。这个属性是必须的
date_stop:指定结束日期的datetime。如果date_delay属性被设置了则忽略这个字段。
date_delay:一个数字记录来设置一个记录的时间(单位:小时)。这个属性将覆盖date-stop并且date_stop将被忽略。
day_length:一个指定工作日长度的整形值。默认是8小时。
color:一个字段,一般是many2one,用来绘制calendar/gantt条目。
mode:设置默认view/zoom模式的字符串值。对于日历视图,这个可以是以下值(默认是month):day,week,month
Screenshots(画面)
月日历
周日历
Gantt Views(甘特视图)
甘特视图为数据提供了等时线视图。一般地,其用于显示项目任务和资源配置。
一个甘特视图是一个项目中所有任务的图表显示。图上的每一条行是任务计划完成的时间长度的图表显示。
资源任务摘要栏位于所有分组任务之上,代表资源如何高效分配在任务中
摘要图的颜色编码如下:
View Specification(视图规范)
下面是一个视图例子:
<gantt color="user_id" date_delay="planned_hours" date_start="date_start" string="Tasks">
<level object="project.project" link="project_id" domain="[]">
<field name="name"/>
</level>
</gantt>
被gantt标签接受的属性与calendar标签接受的属性相似。level标签通过一些many2one字段分组记录。,当前只支持一种级别
这里是一列支持gantt标签的属性:
string:视图的标题字符串
date_start:指定gantt条目开始时间的datetime字段。这个属性石必选的
date_stop:指定结束日期的datetime字段。如果指定date_delay属性则忽略
date_delay:指定记录时间(单位:小时)的numeric字段。此属性将覆盖date_stop并且忽略它。
day_length:指定工作日长度的整形值,默认是8小时。
color:一个字段,一般是many2one,绘制日历/甘特图条目
mode:设置默认的视图/图片模式的字符串值。对于gantt视图,可以是以下值之一:day,3days,week,3weeks,month,3months,year,3years,5years
level标签支持以下属性:
对象
一个openerp对象,与新的视图有many2one关系
link(连接)
连接给定对象的当前对象的字段名
domain
用于过滤对象记录的领域
Drag and Drop(拖曳)
左边面板显示了由给定level字段分组的任务列表。你可以拖曳它们来重新排序或者改变记录的分组。
The main content pane displays horizontal bars plotted on a timeline grid. A group of bars are summarized with a top summary bar displaying resource allocation of all the underlying tasks.
你可以通过水平拖动任务改变任务的开启时间。同时通过拖曳一个条形到右边来改变结束时间。
注意
时间计算要考虑day_length,一个条形可以跨越更多天数,如果一个任务的全部时间比day_length值更大。
Screenshots(画面)
Design Elements(设计元素)
文件描述表单的视图:
<?xml version="1.0"?>
<openerp>
<data>
[view definitions]
</data>
</openerp>
New :你可以在menuitem 标签中使用分组属性分组可访问的菜单。
<shortcut
name="Draft Purchase Order (Proposals)"
model="purchase.order"
logins="demo"
menu="m"/>
<record model="ir.ui.view" id="v">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<form string="Sale Order">
.........
</form>
</field>
</record>
<record id="view_location_tree2" model="ir.ui.view">
<field name="name">stock.location.tree</field>
<field name="model">stock.location</field>
<field name="type">tree</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<tree
colors="blue:usage=='view';darkred:usage=='internal'">
<field name="complete_name"/>
<field name="usage"/>
<field
name="stock_real"
invisible="'product_id' not in context"/>
<field
name="stock_virtual"
invisible="'product_id' not in context"/>
</tree>
</field>
</record>
<record id="view_location_tree" model="ir.ui.view">
<field name="name">stock.location.tree</field>
<field name="model">stock.location</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree toolbar="1">
<field icon="icon" name="name"/>
</tree>
</field>
</record>
<separator string="Links" colspan="4"/>
<notebook colspan="4">....</notebook>
rowspan:使用行数
expand : 是否扩展组
col:提供(给其子节点)的列数
string : (可选)如果设置了,一个结构将使用包含了字符串的标签围在字段分组周围。否则,其将不可见。
<group col="3" colspan="2">
<field name="invoiced" select="2"/>
<button colspan="1" name="make_invoice" states="confirmed" string="Make Invoice"
type="object"/>
</group>
<page string="Order Line"> ... </page>:
数据元素
field标签字段:
<field name="name" default_focus=”1”/>
Example
这里是销售订单对象视图的源代码。
<?xml version="1.0"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partners">
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="ref" select="1"/>
<field name="customer" select="1"/>
<field domain="[('domain', '=', 'partner')]" name="title"/>
<field name="lang" select="2"/>
<field name="supplier" select="2"/>
</group>
<notebook colspan="4">
<page string="General">
<field colspan="4" mode="form,tree" name="address"
nolabel="1" select="1">
<form string="Partner Contacts">
<field name="name" select="2"/>
<field domain="[('domain', '=', 'contact')]" name="title"/>
<field name="function"/>
<field name="type" select="2"/>
<field name="street" select="2"/>
<field name="street2"/>
<newline/>
<field name="zip" select="2"/>
<field name="city" select="2"/>
<newline/>
<field completion="1" name="country_id" select="2"/>
<field name="state_id" select="2"/>
<newline/>
<field name="phone"/>
<field name="fax"/>
<newline/>
<field name="mobile"/>
<field name="email" select="2" widget="email"/>
</form>
<tree string="Partner Contacts">
<field name="name"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="phone"/>
<field name="email"/>
</tree>
</field>
<separator colspan="4" string="Categories"/>
<field colspan="4" name="category_id" nolabel="1" select="2"/>
</page>
<page string="Sales & Purchases">
<separator string="General Information" colspan="4"/>
<field name="user_id" select="2"/>
<field name="active" select="2"/>
<field name="website" widget="url"/>
<field name="date" select="2"/>
<field name="parent_id"/>
<newline/>
</page>
<page string="History">
<field colspan="4" name="events" nolabel="1" widget="one2many_list"/>
</page>
<page string="Notes">
<field colspan="4" name="comment" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<menuitem
action="action_partner_form"
id="menu_partner_form"
parent="base.menu_base_partner"
sequence="2"/>
</data>
</openerp>
这个值是字符串“2.3”,而不是浮点型2.3.
Example 2:
<field name="value">False</field>
同理此值是字符串“False”,而不是布尔值False。这里有点棘手,因为Python的转换规则将任何非空字符串设置为True,所以上述代码可能返回的结果与期望值相反。
如果你想得到float类型的值,一个布尔值或者另外的类型,除了字符串,你需要使用eval属性:
<field name="value" eval="2.3" />
<field name="value" eval="False" />
Button(按钮)
给当前视图添加一个按钮。允许用户在当前记录上执行不同的actions。在点击按钮后,应该总是重新加载这个记录。
按钮有以下属性:
@type
定义了当按钮激活的时候执行action的类型
workflow(默认的)
按钮在使用按钮的@name(作为工作流名字)的当前模式发送工作流信号并提供记录id作为参数(在列表中)
工作流信号可能返回一个action标示符,应该被执行。否则将返回false。
Object
这个按钮将执行当前模式@name命名的方法,并提供记录id作为参数。可能返回一个action描述符来执行
action
按钮触发action(ir.actions.actions)执行。action的id是按钮的名字。
从这里开始,下面的是普通的动作执行工作流。
@special
当前仅有一个可能值:cancel,指明弹出应该关闭,不执行任何RPC调用或者action解析。
注意:
只有在弹出类型窗口才有意义(比如:wizard),否则,等待。
Warning
@special和@type是不能同时使用的。
@name
按钮标示符,用于指示调用哪个方法,此方法用来发送信号或者执行action。
@confirm
执行按钮任务前弹出的一个确认窗口。如果解除了确认,按钮任务就不会执行。
@string
显示在按钮上的标签
@icon
现在按钮上的图标。如果没有设置,按钮上显示的仅仅是文本内容
@states, @attrs, @invisible
标准OpenERP意义的属性视图
@default_focus
如果设置值为1,在那个form表单中按下RETURN键 自动选择之前使用的按钮。
可能会被客户端忽略
在6.0版本中
<button name="order_confirm" states="draft" string="Confirm Order" icon="gtk-execute"/>
<button name="_action_open_window" string="Open Margins" type="object" default_focus=”1”/>
标签
使用字符串属性增加一个简单标签作为标题
例子:
<label string="Test"/>
New Line
即使视图中所有列没有填充,强制返回那一行。
例子:
<newline/>
视图中的继承
当你在一些普通或者特殊的模块中创建一个继承对象时,最好从一个已存在的视图中继承(而不是替换)来添加/修改/删除一些字段和保存。
例子:
<record model="ir.ui.view" id="view_partner_form">
<field name="name">res.partner.form.inherit</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Relations">
<field name="relation_ids" colspan="4" nolabel="1"/>
</page>
</notebook>
</field>
</record>
这里要在基本模块的res.partner.form视图的笔记本中添加一个页面。
继承引擎将解析存在的视图并且查询根节点
<field name="arch" type="xml">
其将添加或者编辑这个标签的内容。如果这个标签有一些属性,其将查找匹配这些属性节点的父视图。
你将在position属性上使用这些值:
替换内容:
<record model="ir.ui.view" id="view_partner_form1">
<field name="name">res.partner.form.inherit1</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<page string="Extra Info" position="replace">
<field name="relation_ids" colspan="4" nolabel="1"/>
</page>
</field>
</record>
使用relation_ids字段替换笔记簿中Extra Info栏的内容
父视图和继承的视图使用--update=all 参数更新,如同其他视图一样。
内容删除
为从表单中删除一个字段,使用position="replace"属性的空元素。例如:
<record model="ir.ui.view" id="view_partner_form2">
<field name="name">res.partner.form.inherit2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="replace"/>
</field>
</record>
内容插入
在指定标签使用position="before"属性给表单添加元素
<record model="ir.ui.view" id="view_partner_form3">
<field name="name">res.partner.form.inherit3</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="before">
<field name="relation_ids"/>
</field>
</field>
</record>
在lang字段前添加relation_ids字段
在指定标签后给表单添加一个字段,使用position="after"属性
<record model="ir.ui.view" id="view_partner_form4">
<field name="name">res.partner.form.inherit4</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="lang" position="after">
<field name="relation_ids"/>
</field>
</field>
</record>
在lang字段后面添加relation_ids字段
Multiple Changes(多次变化)
为了多处发生变化,用一个数据元素封装字段
<record model="ir.ui.view" id="view_partner_form5">
<field name="name">res.partner.form.inherit5</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<data>
<field name="lang" position="replace"/>
<field name="website" position="after">
<field name="lang"/>
</field>
</data>
</field>
</record>
从lang的普通位置删除lang字段,并在website字段后显示
XPath Element
有时候一个视图通过名字简单定义一个定义一个target字段太复杂。例如,这个字段可能位于两个地方。当处理这种情况时,你可使用xpath元素来描述变化发生的地方。
<record model="ir.ui.view" id="view_partner_form6">
<field name="name">res.partner.form.inherit6</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<data>
<xpath
expr="//field[@name='address']/form/field[@name='email']"
position="after">
<field name="age"/>
</xpath>
<xpath
expr="//field[@name='address']/tree/field[@name='email']"
position="after">
<field name="age"/>
</xpath>
</data>
</field>
</record>
在地址列表的表单和树视图email字段后面添加age字段
指定你想使用的视图
有时候你想指定一个视图而不是用默认的
使用priority字段
在视图定义中,这个字段是可用的,默认值为16.一般地,OpenERP将显示使用最高优先级的模式(最小值)。例如,假设对于一个模式我们有两个视图。模式客户端有两个字段:firstname和lastname。我们将定义两个视图,一个显示首先firstname,另一个首先显示lastName。
<!--
Here is the first view for the model 'client'.
We don't specify a priority field, which means
by default 16.
-->
<record model="ir.ui.view" id="client_form_view_1">
<field name="name">client.form.view1</field>
<field name="model">client</field>
<field name="type">form</fiel>
<field name="arch" type="xml">
<field name="firstname"/>
<field name="lastname"/>
</field>
</record>
<!--
A second view, which show fields in an other order.
We specify a priority of 15.
-->
<record model="ir.ui.view" id="client_form_view_2">
<field name="name">client.form.view2</field>
<field name="model">client</field>
<field name="priority" eval="15"/>
<field name="type">form</fiel>
<field name="arch" type="xml">
<field name="lastname"/>
<field name="firstname"/>
</field>
</record>
闲杂,每次OpenERP得为独享client显示一个表单视图,在两个视图之间有一个选择。其将总是使用第二个视图,因为有高点的优先级。除非你告诉它使用第一个。
Specify per-action view
为说明这点,我们将创建两个表单项来显示client对象的表单视图
<!--
This action open the default view (in our case,
the view with the highest priority, the second one)
-->
<record
model="ir.actions.act_window"
id="client_form_action">
<field name="name">client.form.action</field>
<field name="res_model">client</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
</record>
<!--
This action open the view we specify.
-->
<record
model="ir.actions.act_window"
id="client_form_action1">
<field name="name">client.form.action1</field>
<field name="res_model">client</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="client_form_view_1"/>
</record>
<menuitem id="menu_id" name="Client main menu"/>
<menuitem
id="menu_id_1"
name="Here we don't specify the view"
action="client_form_action" parent="menu_id"/>
<menuitem
id="menu_id_1"
name="Here we specify the view"
action="client_form_action1" parent="menu_id"/>
如你所见,我们可以指定一个视图。这意味着当我们打开第二个菜单时,OpenERP将使用表单视图client_form_view_1,而不仅仅取决于优先级。
注意
如果你要关联一个在其他模块定义的视图,记得使用ref属性的模块名(module.view_id)
指定关联字段的视图
使用上下文
虽然view_id在菜单/action中工作的很好,但是如何指定一个视图使用one2many字段?当你有一个one2many字段时,使用两个视图。一个树视图(蓝色),和当你点击红色按钮时显示的表单视图
当你在一个表单视图中添加一个one2many字段,你应该做这些:
<field name="order_line" colspan="4" nolabel="1"/>
如果你想指定要使用的视图,你可以添加一个上下文属性,并为每类支持的视图指定一个视图id,如同action中的view_id属性一样,除了提供的视图id必须是全限定模块名,甚至是必须属于同一个模块。
注意
你得将模块名放在view_id中,因为当视图显示的时候已经评估,并且当XML文件解析时没有评估,所以了模块名信息不可用。结果是将使用默认的视图(看下面的)
如果你没有指定视图,OpenERP将按照以下顺序选择一个:
注意
上下文关键字命名为<视图类型>_view_ref
注意
默认地,OpenERP从不使用不是为你的对象定义的视图。如果你有两个模块,有相同的字段,但是了有不同的model名字,OpenERP将从不使用其中一个的视图,甚至是一个模型继承了另一个模型
你可以强制性手动控制一个视图,要不在action或者在上下文中。
使用子视图
在关联字段的情况下,你可以直接在一个字段里面直接创建一个视图。
<record model="ir.ui.view" id="some_view">
<field name="name">some.view</field>
<field name="type">form</field>
<field name="model">some.model.with.one2many</field>
<field name="arch" type="xml">
<field name="..."/>
<!-- <=== order_line is a one2many field -->
<field name="order_line" colspan="4" nolabel="1">
<form>
<field name="qty"/>
...
</form>
<tree>
<field name="qty"/>
...
</tree>
</field>
</field>
如果开发人员想在另一个模块中继承这个视图,你需要继承其父视图并且修改其子字段。在子视图中,你通常需要使用XPath Element来确切描述在哪里放置你的新字段。
<record model="ir.ui.view" id="some_inherited_view">
<field name="name">some.inherited.view</field>
<field name="type">form</field>
<field name="model">some.model.with.one2many</field>
<field name="inherit_id" ref="core_module.some_view"/>
<field name="arch" type="xml">
<data>
<xpath
expr="//field[@name='order_line']/form/field[@name='qty']"
position="after">
<field name="size"/>
</xpath>
<xpath
expr="//field[@name='order_line']/tree/field[@name='qty']"
position="after">
<field name="size"/>
</xpath>
</data>
</field>