2012-06-04 16 views
7

oryginalne poglądy:OpenERP zawsze wyświetla odziedziczony widok zamiast oryginalnych

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

odziedziczony widok od oryginału:

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

Więc co się dzieje, jest OpenERP zawsze wyświetla odziedziczony pogląd ignoruje wartość priorytetu. Czy to oczekiwane zachowanie, czy jest coś innego, czego mi brakuje?

Jeśli jest to oczekiwane zachowanie, to proszę czytać dalej :-)

mam my.second.object z many2one pola do my.object, a gdy chcę utworzyć my.object od tej dziedzinie, chcę otworzyć nieco inną formę widok z my.object. Próbuję stworzyć inny widok tylko w tym celu, ale jak widzisz, to nie działa tak łatwo (czy tak?).

Każda pomoc jest doceniana.

Odpowiedz

14

Tak, to oczekiwane zachowanie. Priorytet widoku służy tylko do wybrania głównego widoku do użycia, gdy nie zażądano żadnego widoku. Odziedziczone widoki to "widoki poprawek", które zachowują się jak elementy potomne widoku, z którego dziedziczą, i które nigdy nie mogą być wybrane jako "widoki główne". Zawsze mają zastosowanie do nadrzędnego widoku, gdy ten widok jest wyświetlany.

Jeśli chcesz mieć widok alternatywny dla określonego modelu, powinieneś zdefiniować nowy widok autonomiczny, który nie dziedziczy z żadnego innego. Jeśli ten pogląd jest przeznaczona do stosowania tylko w kontekście widzenia my.second.object istnieją dwa wspólne sztuczki, aby uczynić OpenERP używać go:

  • zdefiniować inline w widoku formularza z my.second.object, jak dzieckiem Element <field>. To może nie działać na wszystkich klientach OpenERP w zależności od wersji i działa najlepiej w przypadku deklarowania widoków formularzy w trybie liniowym dla linii o2m.
  • Zadeklaruj to jako widok autonomiczny z niskim priorytetem (na przykład 32) i umieść magiczny klucz kontekstowy w polu many2one widoku , który powinien z niego korzystać. Magiczny klucz ma postać <view_type>_view_ref, a wartość musi być identyfikatorem XML pożądanego widoku. To powinno działać wszędzie.
<!-- 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> 

Dla porównania, rzucić okiem na this page dokumentacji OpenERP który wyjaśnia większość opcji dotyczących wytwarzania i stosowania widoki kontekstową.

UWAGA: Jeśli korzystałeś form_view_ref iz widoku formularza, jeśli masz dowolny przycisk, który otwiera się inny widok formie jakiegoś innego modelu następnie to daje błąd. Spowoduje to otwarcie tego samego widoku formularza, co Ty, , które przeszły w form_view_ref także dla innego modelu.

+0

Chociaż żadna z dwóch metod nie zapewnia __clean__ sposobu na rozwiązanie mojego problemu, ale odpowiada na moje pytanie. Pozdrawiam: – and3p

+0

@ and3p: nie wiesz, czego oczekiwałeś jako "czystej drogi", aby rozwiązać swój problem? Czy masz na myśli, że myślałeś, że OpenERP zachowałoby się inaczej lub oferowałoby inne opcje? Czy chciałbyś mieć drugi rodzaj dziedziczenia widoku, który umożliwia również kopiowanie "głównych widoków"? Obecny system jest zaprojektowany tak, aby moduły mogły się wzajemnie rozszerzać, wykonując modyfikacje punktowe widoków zdefiniowanych przez ich "rodzica", umożliwiając różne kombinacje. – odony

+0

Cóż, w tej chwili musiałem utworzyć duplikat (z wyjątkiem kilku modyfikacji) widoku mojego "głównego widoku" tylko do użycia z 'my.second.object', co wprowadziło redundancję kodu. Miałem nadzieję, że nie będę musiał uciekać się do duplikowania kodu, jeśli użyłem dziedziczenia widoku, ale jako "Widoki dziedziczne są" widokami poprawek "... inne opcje nie są możliwe. Popraw mnie, jeśli moje rozumienie dziedziczenia widoku jest błędne. – and3p

1

Jakie "położenie" zdefiniowałeś w <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

Użyłem "zastąpiony", ale czy jest to istotne dla mojego pytania? Problem polega na tym, że OpenERP używa mojego dziedziczonego widoku nawet tam, gdzie powinien używać oryginalnego. – and3p

+0

Może kiedy użyjesz "zastąpionego" OpenERP zastąpi oryginalny widok dziedziczonym? – voy

+0

Och, przepraszam, myślę, że źle zrozumiałem twoje pytanie ... – voy

0

Może nie być możliwości, aby dziedziczona forma była standardową formą modelu, tak aby była prezentowana automatycznie.

ALE Jeśli spojrzysz na określone zadanie -> otwórz dziedziczony widok formularza dla jednego2 jednego pola np .; jest. Ustaw zmienną kontekstową "form_view_ref" na "MODULE.VIEW_ID".

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

Nadal działa z Odoo 9.0.

Powiązane problemy