7

原观点:

<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字段many2oneto my.object,当我想my.object从这个字段创建时,我想打开一个有点不同的表单视图my.object。我正试图为此目的创建一个不同的视图,但正如您所见,它并不那么容易工作(或者是这样吗?)。

任何帮助表示赞赏。

4

3 回答 3

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>

作为参考,请查看 OpenERP 文档的这一页,其中解释了制作和使用特定于上下文的视图的大多数选项。

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

于 2012-06-04T12:31:58.997 回答
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>
于 2012-06-04T11:57:52.193 回答
0

可能无法将继承形式作为模型的标准形式,以便自动呈现。

但是,如果您查看特定任务-> 打开 one2many 字段的继承表单视图,例如;有。将上下文变量“form_view_ref”设置为“MODULE.VIEW_ID”。

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

仍然适用于 Odoo 9.0。

于 2016-11-18T14:50:22.833 回答