原始观点:
<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}}。我正在尝试为此目的创建一个不同的视图,但正如您所看到的那样,它不会那么容易(或者它是什么?)。
感谢任何帮助。
答案 0 :(得分:14)
是的,这是预期的行为。视图的优先级仅用于选择在未请求特定视图时使用的主视图。继承视图是“补丁视图”,其行为类似于它们继承的视图的子视图,并且可能永远不会被选为“主视图”。当显示该视图时,它们始终应用于父视图之上。
如果您想要某个模型的替代视图,您应该定义一个不从任何其他模型继承的新独立视图。如果该视图仅用于my.second.object
视图的上下文中,则有两种常用技巧可以使OpenERP使用它:
my.second.object
的表单视图中将其定义为内联,作为<field>
元素的子元素。这可能不适用于所有OpenERP客户端,具体取决于版本,并且最适合通常为o2m
行声明内联表单视图。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。