2012-06-04 11 views
7

Original-Ansichten:OpenERP zeigt immer geerbt Ansicht statt Original

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

geerbt Blick aus dem 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> 

Also, was passiert ist OpenERP immer die geerbte Ansicht zeigt den Prioritätswert zu ignorieren. Ist das erwartetes Verhalten, oder fehlt mir noch etwas?

Wenn dies das erwartete Verhalten ist, dann lesen Sie bitte weiter :-)

I my.second.object mit many2one Feld my.object haben, und wenn ich my.object aus diesem Bereich erstellen möchten, möchte ich andere Form ein wenig öffnen Ansicht von my.object. Ich versuche nur zu diesem Zweck eine andere Ansicht zu erstellen, aber wie Sie sehen, funktioniert das nicht so einfach (oder?).

Jede Hilfe wird geschätzt.

Antwort

14

Ja, es ist das erwartete Verhalten. Die Priorität einer Ansicht dient nur dazu, die Hauptansicht auszuwählen, die verwendet werden soll, wenn keine bestimmte Ansicht angefordert wurde. Vererbte Ansichten sind "Patch-Ansichten", die sich wie Kinder der Ansicht verhalten, von der sie erben, und möglicherweise nie als "Hauptansichten" ausgewählt werden. Sie gelten immer oberhalb ihrer übergeordneten Ansicht, wenn diese Ansicht angezeigt wird.

Wenn Sie eine alternative Ansicht für ein bestimmtes Modell wünschen, sollten Sie eine neue Standalone-Ansicht definieren, die von keiner anderen erbt. Wenn diese Ansicht nur im Zusammenhang mit der Ansicht von my.second.object werden soll verwendet werden, gibt es zwei gemeinsame Tricks OpenERP machen verwenden:

  • es definiert inline in der Formularansicht von my.second.object, als Kind von der <field> Element. Dies funktioniert möglicherweise nicht in allen OpenERP-Clients, abhängig von der Version, und funktioniert am besten für die Deklaration von Inline-Formularansichten für o2m Zeilen.
  • Deklarieren Sie es als eigenständige Ansicht mit niedriger Priorität (z. B. 32), und fügen Sie einen magischen Kontextschlüssel in das Feld many2one der Ansicht my.second.object ein, die es verwenden soll. Der magische Schlüssel hat das Format <view_type>_view_ref, und der Wert muss die XML-ID der gewünschten Ansicht sein. Dies sollte überall funktionieren.
<!-- 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> 

Als Referenz haben einen Blick auf this page der OpenERP Dokumentation, die die meisten Optionen zur Herstellung und Verwendung kontextspezifische Ansichten erklärt.

HINWEIS: Wenn Sie form_view_ref und von Formularansicht verwendet haben, wenn Sie eine beliebige Taste haben, die dann eine andere Form Ansicht eines anderen Modells öffnet es wird Ihnen Fehler geben. Es wird versuchen, die gleiche Formularansicht zu öffnen, die Sie auch in Form_view_ref für ein anderes Modell übergeben haben.

+0

Obwohl keine der beiden Methoden bieten die __clean__ Weg, um mein Problem zu lösen, aber es beantwortet meine Frage. Prost – and3p

+0

@ and3p: nicht sicher, was Sie als "den sauberen Weg" erwartet, um Ihr Problem zu lösen? Meinst du, du dachtest, OpenERP würde sich anders verhalten oder andere Optionen anbieten? Möchten Sie eine zweite Art von View-Vererbung haben, die es erlaubt auch "Hauptansichten" zu kopieren? Das derzeitige System ist so konzipiert, dass Module sich gegenseitig sauber erweitern können, indem die von ihren "Eltern" definierten Ansichten punktuell modifiziert werden, wodurch alle Arten von Kombinationen möglich sind. – odony

+0

Nun, im Moment musste ich ein Duplikat erstellen (abgesehen von ein paar Änderungen), um meine 'Hauptansicht' zu sehen, nur um mit 'my.second.object' verwendet zu werden, was Code-Redundanz einführte. Ich hatte gehofft, ich würde nicht auf Code-Duplizierung zurückgreifen müssen, wenn ich die Vererbung von Ansichten verwende, aber als vererbte Ansichten sind "Patch-Ansichten" ... andere Optionen sind nicht möglich. Korrigieren Sie mich, wenn mein Verständnis von View-Vererbung falsch ist. – and3p

1

Welche "Position" haben Sie in <field name="field_from_original_view"> definiert?

<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

Ich verwendete 'ersetzt ', aber ist es relevant für meine Frage? Das Problem ist, dass OpenERP meine geerbte Ansicht selbst dort verwendet, wo sie die ursprüngliche verwenden sollte. – and3p

+0

Vielleicht, wenn Sie "ersetzt" verwenden OpenERP ersetzt die ursprüngliche Ansicht mit vererbt? – voy

+0

Oh, Entschuldigung, ich glaube, ich habe Ihre Frage missverstanden ... – voy

0

Möglicherweise gibt es keine Möglichkeit, ein vererbtes Formular als Standardform Ihres Modells zu definieren, damit es automatisch angezeigt wird.

ABER Wenn Sie sich eine bestimmte Aufgabe ansehen -> öffnen Sie eine vererbte Formularansicht für ein one2many Feld z. es gibt. Setzen Sie die Kontextvariable 'form_view_ref' auf 'MODULE.VIEW_ID'.

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

Funktioniert immer noch mit Odoo 9.0.

Verwandte Themen