为什么我的act_window不具有views = definition并且使用act_window.view等效?

时间:2014-12-12 10:07:11

标签: odoo

说我有这个:

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

哪个有效,但我不明白为什么第一个案例没有。

1 个答案:

答案 0 :(得分:4)

views模型上的ir.actions.act_window字段是一个非存储的计算字段,没有反函数。换句话说,它是只读的,甚至不存储在数据库中。这就是为什么当您使用此字段创建新操作时,它不会保存,只会被忽略。

文档有点令人困惑(我也很难解决这个问题),但技术上并没有错。该字段确实是(view_id, view_type)对的列表,在处理存储在数据库中的操作时,您无法直接更改它。它会根据view_idview_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',
}