OpenERP始终显示继承的视图而不是原始视图
原始视图:OpenERP始终显示继承的视图而不是原始视图,openerp,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>
<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>
view.name
我的目标
形式
...
从原始视图继承的视图:
<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>
view.name
我的目标
形式
...
因此,OpenERP总是显示继承的视图,忽略优先级值。这是我的预期行为,还是我还遗漏了什么
如果这是预期的行为,请进一步阅读:-)
我有my.second.object
和manyOne
字段到my.object
,当我想从这个字段创建my.object
时,我想打开一个稍微不同的my.object
表单视图。我正试图为此目的创建一个不同的视图,但正如您所看到的,它并不那么容易工作(或者确实如此?)
非常感谢您的帮助。您在
中定义了什么“职位”
view.name
我的目标
形式
是,这是预期的行为。视图的优先级仅用于在未请求特定视图时选择要使用的主视图。继承视图是“面片视图”,其行为类似于它们继承自的视图的子视图,并且可能永远不会被选为“主视图”。显示父视图时,它们始终应用于父视图的顶部
如果需要某个模型的替代视图,则应定义一个不从任何其他模型继承的新独立视图。如果该视图仅在my.second.object
视图的上下文中使用,则有两个常见的技巧可以让OpenERP使用它:
- 在
的表单视图中内联定义它,作为my.second.object
元素的子元素。这可能不适用于所有OpenERP客户端,具体取决于版本,通常最适合于为
行声明内联表单视图o2m
- 将其声明为低优先级的独立视图(例如32),并在应使用它的
视图的my.second.object
字段中放置一个魔术上下文键。魔术键的格式为manyOne
,该值必须是所需视图的XML ID。这应该适用于所有地方\u view\u ref
作为参考,请参阅OpenERP文档,该文档解释了创建和使用特定于上下文的视图的大多数选项
注意:如果您使用了form\u view\u ref,如果您使用了from form view
打开其他模型的其他窗体视图的任何按钮
它会给你错误。它将尝试打开与您相同的表单视图
也已传递另一个模型的表单\视图\参考
可能无法将继承的表单作为模型的标准表单,以便自动显示该表单 但如果查看特定任务-->打开one2many字段的继承表单视图,例如。;有。将上下文变量“form\u view\u ref”设置为“MODULE.view\u ID”
<field name="myOne2ManyField" context="{'form_view_ref': 'myModule.myInheritedView'}/>
我用替换了,但这与我的问题有关吗?问题是OpenERP即使在应该使用原始视图的地方也使用了我的继承视图。也许当您使用“替换”时,OpenERP将原始视图替换为继承视图?虽然这两种方法都没有提供解决问题的干净方法,但它确实回答了我的问题。Cheers@and3p:不确定您希望用什么“干净的方式”来解决您的问题?你是说你认为OpenERP会有不同的表现还是提供其他选择?您是否希望有第二种视图继承,也允许复制“主视图”?当前系统的设计目的是通过对“父视图”定义的视图进行局部修改,允许各种组合,从而使模块能够干净地相互扩展。现在,我必须创建一个“主视图”的副本(除了一些修改)视图,以便与my.second.object
一起使用,什么引入了代码冗余。如果我使用视图继承,我希望我不需要求助于代码复制,但是由于继承的视图是“补丁视图”…
其他选项是不可能的。如果我对视图继承的理解是错误的,请纠正我。@3P:的确,视图继承并不意味着允许复制+修补,而只是暂时修补。如果非常需要允许复制,我们可以在框架中引入对它的支持。顺便说一句,复制+修补程序有一种方法,但它只适用于复制的模型(即,使用_inherit='model1'和_name='model2')。在这种情况下,可以为model2声明继承的视图,但仍然可以从model1视图继承。我认为使用primary可以让两个视图并排显示,并分别显示它们。
<field name="myOne2ManyField" context="{'form_view_ref': 'myModule.myInheritedView'}/>