2012-06-04 13 views
7

vista originali:OpenERP visualizza sempre vista ereditario, invece di originali

<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 ereditato da quello originale:

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

Quindi, quello che succede è OpenERP visualizza sempre la vista ereditato ignorando il valore di priorità. È questo comportamento atteso, o c'è qualcos'altro che mi manca?

Se questo è il comportamento previsto, quindi si prega di leggere oltre :-)

ho my.second.object con many2one campo per my.object, e quando voglio creare my.object da questo campo, voglio aprire una forma diversa po ' vista di my.object. Sto cercando di creare una visione diversa solo per quello scopo, ma come vedi non funziona così facilmente (o lo fa?).

Qualsiasi aiuto è apprezzato.

risposta

14

Sì, è il comportamento previsto. La priorità di una vista serve solo a selezionare la vista principale da utilizzare quando non è stata richiesta una vista specifica. Le visualizzazioni ereditate sono "viste di patch" che si comportano come i figli della vista da cui ereditano e potrebbero non essere mai selezionate come "viste principali". Si applicano sempre in cima alla vista principale quando viene visualizzata la vista.

Se si desidera una vista alternativa per un determinato modello, è necessario definire una nuova vista autonoma che non erediti da nessun altro. Se questo punto di vista è pensato per essere utilizzato solo nel contesto della vista di my.second.object, ci sono due trucchi comuni per fare OpenERP usarlo:

  • definirlo in linea nella visualizzazione sotto forma di my.second.object, come un bambino della <field> elemento. Questo potrebbe non funzionare in tutti i client OpenERP a seconda della versione e funziona meglio per dichiarare normalmente le viste in linea per le righe o2m.
  • Dichiararlo come vista autonoma con priorità bassa (ad esempio 32) e inserire una chiave di contesto magico nel campo many2one della vista my.second.object che dovrebbe utilizzarlo. La chiave magica è nella forma <view_type>_view_ref e il valore deve essere l'ID XML della vista desiderata. Questo dovrebbe funzionare ovunque.
<!-- 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> 

Per riferimento, uno sguardo a this page della documentazione OpenERP che spiega la maggior parte delle opzioni per fare e usare viste specifiche al contesto.

NOTA: Se avete utilizzato form_view_ref e dalla vista modulo se avete qualsiasi pulsante che si apre un'altra vista sotto forma di qualche altro modello, allora vi darà errore. Proverà ad aprire la stessa vista modulo che hai già inviato in form_view_ref per un altro modello.

+0

Sebbene nessuno dei due metodi fornisca il modo __clean__ per risolvere il mio problema, ma risponde alla mia domanda. Cheers – and3p

+0

@ and3p: non sei sicuro di cosa ti aspetti come "la via pulita" per risolvere il tuo problema? Intendi che pensi che OpenERP si comporti diversamente o offra altre opzioni? Ti piacerebbe avere un secondo tipo di ereditarietà della vista che consente di copiare anche "viste principali"? Il sistema attuale è progettato per consentire ai moduli di estendersi l'un l'altro in modo pulito, eseguendo modifiche puntuali delle viste definite dal loro "genitore", consentendo tutti i tipi di combinazioni. – odony

+0

Bene, in questo momento ho dovuto creare una vista duplicata (tranne alcune modifiche) della mia 'vista principale' solo per essere usata con 'my.second.object', cosa ha introdotto la ridondanza del codice. Speravo che non avrei dovuto ricorrere alla duplicazione del codice se avessi usato l'ereditarietà delle viste, ma come "Visualizzazioni ereditate sono" viste delle patch "..." non sono possibili altre opzioni. Correggimi se la mia comprensione dell'ereditarietà della vista è sbagliata. – and3p

1

Quale "posizione" definita in <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

Ho usato 'sostituito', ma è rilevante per la mia domanda? Il problema è che OpenERP usa la mia vista ereditata anche lì dove dovrebbe usare quella originale. – and3p

+0

Forse quando si utilizza "sostituito" OpenERP sostituisce la visualizzazione originale con ereditato? – voy

+0

Oh, mi dispiace, penso di aver frainteso la tua domanda ... – voy

0

Potrebbe non esserci la possibilità di rendere un modulo ereditato il modulo standard del modello in modo che venga presentato automaticamente.

MA Se si guarda un'attività specifica -> aprire una vista modulo ereditata per un campo one2many, ad es. c'è. Imposta la variabile di contesto 'form_view_ref' su 'MODULE.VIEW_ID'.

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

Ancora funziona con Odoo 9.0.

Problemi correlati