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

and*_*d3p 7 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>
Run Code Online (Sandbox Code Playgroud)

从原来继承的观点:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

my.second.objectmany2onemy.object,当我想创建my.object从这个领域,我想开的有点不同形式的看法my.object.我正在尝试为此目的创建一个不同的视图,但正如你所看到它不那么容易(或者它?).

任何帮助表示赞赏.

odo*_*ony 14

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

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

  • 将其my.second.object作为<field>元素的子元素的形式视图内联定义.这可能不适用于所有OpenERP客户端,具体取决于版本o2m,通常用于为行声明内联表单视图.
  • 将其声明为具有低优先级的独立视图(例如32),并将魔术上下文键放在应该使用它many2onemy.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>
Run Code Online (Sandbox Code Playgroud)

有关参考,请查看OpenERP文档的此页面,该文档解释了制作和使用特定于上下文的视图的大多数选项.

注意:如果您已经使用了form_view_ref,并且从表单视图中如果您有任何按钮打开其他模型的另一个表单视图,那么它将给您错误.它将尝试打开您在另一个模型的form_view_ref中传递的相同表单视图.

  • @ and3p:是的,视图继承并不意味着允许复制+修补,而只是修补此刻.如果强烈需要允许复制,我们可以在框架中引入对此的支持.BTW那里*是*复制+补丁的一种方法,但它只适用于复制的模型(即使用带有_name ='model2'的_inherit ='model1').在这种情况下,可以为model2声明继承的视图,但仍然可以从model1视图继承.它根本不适用于model1. (2认同)