说我有这个:
<record id="mrp_bom_form_action_master_products" model="ir.actions.act_window">
<field name="name">Master Bill of Materials</field>
<field name="res_model">mrp.bom</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" eval="False"/>
<field name="views" eval="[(False, 'tree'), (ref('mrp_bom_form_view_master'), 'form')]"/>
<field name="search_view_id" ref="mrp.view_mrp_bom_filter"/>
</record>
根据文件:
视图
(view_id,view_type)对的列表。每对的第二个元素是视图的类别(树,形式,图形,......),第一个是可选的数据库ID(或False)。如果未提供id,则客户端应获取所请求模型的指定类型的默认视图(这由fields_view_get()自动完成)。列表的第一种类型是默认视图类型,默认情况下将在执行操作时打开。每个视图类型在列表中最多只能出现一次
但它不起作用。相反,我已经做到了这一点:
<record model="ir.actions.act_window.view"
id="mrp_bom_form_view_master_form">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="act_window_id" ref="mrp_bom_form_action_master_products"/>
</record>
<record model="ir.actions.act_window.view"
id="mrp_bom_form_view_master_tree">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="mrp_bom_form_view_master"/>
<field name="act_window_id" ref="mrp_bom_form_action_master_products"/>
</record>
哪个有效,但我不明白为什么第一个案例没有。
答案 0 :(得分:4)
views
模型上的ir.actions.act_window
字段是一个非存储的计算字段,没有反函数。换句话说,它是只读的,甚至不存储在数据库中。这就是为什么当您使用此字段创建新操作时,它不会保存,只会被忽略。
文档有点令人困惑(我也很难解决这个问题),但技术上并没有错。该字段确实是(view_id, view_type)
对的列表,在处理存储在数据库中的操作时,您无法直接更改它。它会根据view_id
和view_ids
字段自动生成。
但是,您可以直接将该字段用于未存储在数据库中但是从python代码返回的操作。以下是account_payment
模块中的示例:
return {
'name': _('Entry Lines'),
'context': context,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'payment.order.create',
'views': [(resource_id,'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}