2012-06-04 14 views
7

vistas originales:OpenERP siempre muestra la vista heredada en lugar de originales

<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> 

vista heredada del original:

<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> 

Lo que pasa es OpenERP siempre muestra la vista heredada ignorando el valor de prioridad. ¿Es este comportamiento esperado, o hay algo más que me falta?

Si este es el comportamiento esperado, entonces lea más :-)

tengo my.second.object con many2one campo para my.object, y cuando quiero crear my.object de este campo, quiero abrir una forma poco diferente vista de my.object. Intento crear una vista diferente solo para ese propósito, pero como ve, no funciona tan fácilmente (¿o sí?).

Cualquier ayuda es apreciada.

Respuesta

14

sí lo es el comportamiento esperado. La prioridad de una vista solo sirve para seleccionar la vista principal a usar cuando no se solicitó una vista específica. Las vistas heredadas son "vistas de parches" que actúan como elementos secundarios de la vista desde la que heredan, y es posible que nunca se seleccionen como "vistas principales". Siempre se aplican en la parte superior de su vista principal cuando se muestra esa vista.

Si desea una vista alternativa para un determinado modelo, debe definir una nueva vista independiente que no herede de ninguna otra. Si este punto de vista está destinado a ser utilizado únicamente en el contexto de la vista de my.second.object, hay dos trucos comunes de hacer OpenERP usarlo:

  • definirlo en línea en la vista en forma de my.second.object, como un hijo de la <field> elemento. Es posible que esto no funcione en todos los clientes de OpenERP según la versión, y funciona mejor para declarar vistas de formularios en línea para líneas o2m, normalmente.
  • Declararlo como una vista independiente con una prioridad baja (por ejemplo, 32) y poner una clave de contexto mágico en el campo many2one de la vista my.second.object que debe usarlo. La clave mágica tiene el formato <view_type>_view_ref, y el valor debe ser el ID XML de la vista deseada. Esto debería funcionar en todas partes.
<!-- 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> 

Como referencia, echar un vistazo a la documentación de this page OpenERP que explica la mayor parte de las opciones para hacer y usar puntos de vista específicos del contexto.

NOTA: Si ha utilizado form_view_ref y de la vista formulario si tiene cualquier botón que se está abriendo otra vista forma de algún otro modelo continuación se le dará error. Intentará abrir el mismo formulario que usted ha pasado en form_view_ref para otro modelo también.

+0

Aunque ninguno de los dos métodos proporciona la forma __clean__ para resolver mi problema, pero responde mi pregunta. Cheers – and3p

+0

@ and3p: ¿no está seguro de lo que esperaba como "la manera más limpia" de resolver su problema? ¿Quiere decir que pensó que OpenERP se comportaría de manera diferente u ofrecería otras opciones? ¿Te gustaría tener un segundo tipo de herencia de vista que también permita copiar "vistas principales"? El sistema actual está diseñado para permitir que los módulos se extiendan unos a otros de manera limpia, realizando modificaciones puntuales de las vistas definidas por sus "padres", permitiendo todo tipo de combinaciones. – odony

+0

Bueno, ahora tenía que crear una vista duplicada (excepto por algunas modificaciones) de mi "vista principal" solo para ser utilizada con 'my.second.object', lo que introdujo la redundancia de código. Esperaba que no necesitaría recurrir a la duplicación de código si utilicé la herencia de vistas, pero como 'Vistas heredadas son 'vistas de parches' ...' otras opciones no son posibles. Corrígeme si mi comprensión sobre la herencia de vistas es incorrecta. – and3p

1

¿Qué "posición" definió en <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> 
+0

He utilizado 'replace', pero ¿es relevante para mi pregunta? El problema es que OpenERP usa mi vista heredada incluso allí donde debería estar usando la original. – and3p

+0

¿Tal vez cuando usa "reemplazado" OpenERP reemplaza la vista original con heredado? – voy

+0

Oh, lo siento, creo que he entendido mal tu pregunta ... – voy

0

Es posible que no exista la posibilidad de hacer que un formulario heredado sea la forma estándar de su modelo para que se presente automáticamente.

PERO Si observa una tarea específica -> abra una vista de formulario heredada para un campo one2many, por ejemplo; Ahi esta. Establezca la variable de contexto 'form_view_ref' en 'MODULE.VIEW_ID'.

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

Todavía funciona con Odoo 9.0.

Cuestiones relacionadas