OpenERP始终显示继承的视图而不是原始视图

时间:2012-06-04 11:32:07

标签: openerp

原始观点:

<record id='view_1' model='ir.ui.view'>
    <field name="name">view.name</field>
    <field name="model">my.object</field>
    <field name="priority" eval="17"/>
    <field name="type">form</field>
    <field name="arch" type="xml">
        ...
    </field>
</record>

原始的继承视图:

<record id='view_2' model='ir.ui.view'>
    <field name="name">view.name</field>
    <field name="model">my.object</field>
    <field name="priority" eval="10"/>
    <field name="inherit_id" ref="view_1"/>
    <field name="type">form</field>
    <field name="arch" type="xml">
        ...
    </field>
</record>

所以会发生什么是OpenERP总是显示忽略优先级值的继承视图。这是预期的行为,还是我缺少的其他东西?

如果这是预期的行为,请进一步阅读: - )

我有my.second.object many2one字段到my.object,当我想从此字段创建my.object时,我想打开一个不同的my.object形式视图{ {1}}。我正在尝试为此目的创建一个不同的视图,但正如您所看到的那样,它不会那么容易(或者它是什么?)。

感谢任何帮助。

3 个答案:

答案 0 :(得分:14)

是的,这是预期的行为。视图的优先级仅用于选择在未请求特定视图时使用的主视图。继承视图是“补丁视图”,其行为类似于它们继承的视图的子视图,并且可能永远不会被选为“主视图”。当显示该视图时,它们始终应用于父视图之上。

如果您想要某个模型的替代视图,您应该定义一个不从任何其他模型继承的新独立视图。如果该视图仅用于my.second.object视图的上下文中,则有两种常用技巧可以使OpenERP使用它:

  • my.second.object的表单视图中将其定义为内联,作为<field>元素的子元素。这可能不适用于所有OpenERP客户端,具体取决于版本,并且最适合通常为o2m行声明内联表单视图。
  • 将其声明为具有低优先级的独立视图(例如32),并在应使用它的many2one视图的my.second.object字段中添加魔术上下文密钥。魔术键的格式为<view_type>_view_ref,值必须是所需视图的XML ID。这应该适用于所有地方。
<!-- Example 1: inline form view -->
<form string="My second object">
   <field name="my_object_id">
       <form string="My object inline view">
           <field name="name"/>
       </form>
   </field>
 </form>

<!-- Example 2: explicitly ask for special view using magic key -->
<form string="My second object">
   <field name="my_object_id" context="{'form_view_ref': 'module.my_object_form2'}"/>
</form>

作为参考,请查看OpenProP文档的this page,该文档解释了制作和使用特定于上下文的视图的大多数选项。

  

注意:如果您使用过form_view_ref,则可以从表单视图中使用   任何按钮打开另一个模型的另一个窗体视图然后   它会给你错误。它会尝试打开相同的表单视图   已经通过form_view_ref传递了另一个模型。

答案 1 :(得分:1)

您在<field name="field_from_original_view">中定义了什么“位置”?

<record id='view_2' model='ir.ui.view'>
    <field name="name">view.name</field>
    <field name="model">my.object</field>
    <field name="priority" eval="10"/>
    <field name="inherit_id" ref="view_1"/>
    <field name="type">form</field>
    <field name="arch" type="xml">
        <field name="field_from_original_view" position="after" (or before)>
            <field name="inherit1" />
            <field name="inherit2" />
            <field name="inherit3" />
        </field>
    </field>
</record>

答案 2 :(得分:0)

可能无法将继承的表单作为模型的标准形式,以便自动显示。

但如果你看一个特定的任务 - &gt;打开一个one2many字段的继承表单视图,例如;有。设置上下文变量&#39; form_view_ref&#39;到&#39; MODULE.VIEW_ID&#39;。

<field name="myOne2ManyField" context="{'form_view_ref': 'myModule.myInheritedView'}/>

仍适用于Odoo 9.0。