コンテンツへスキップ
メニュー
この質問にフラグが付けられました
4 返信
1020 ビュー

In a tree view inside a page, I need to show a column depending on a certain field. There is a transport field whose value can either be 'air' or 'ocean'. If 'air', I need to show the 'flight_no' column in the tree view, if it is 'ocean', I need to show 'voyage_no' instead.

Here is the current code snippet of the view, which is correct if it is ocean:

<page string="Routes"> 
   <field name="freight_routes" nolabel="1" widget="one2many_list" context="{'shipper_id':shipper_id, 'consignee_id':consignee_id}">
      <form>
         <sheet>
            ...
            <group>
               <group>
                  <field name="transport" widget="radio" options="{'horizontal': true}"/>
               </group>
            <group>
         </sheet>
      </form>
      <tree>
         <field name="name" string="Carriage"/>
         <field name="arrival_datetime"/>
         <field name="voyage_no"/>
         <field name="transport"/>
         <field name="line_added" column_invisible="1"/>
         <button name="action_insert_line_service" type="object" string="Add to Service" icon="fa-plus-square-o"/>
      </tree>
   </field>
</page>

I tried this but it did not work, maybe because transport is inside the form?

...
<tree>
         <field name="name" string="Carriage"/>
         <field name="arrival_datetime"/>
<field name="flight_no" column_invisible="transport != 'air'"/>
         <field name="voyage_no" column_invisible="transport != 'ocean'"/>
         <field name="transport"/>
         <field name="line_added" column_invisible="1"/>
         <button name="action_insert_line_service" type="object" string="Add to Service" icon="fa-plus-square-o"/>
      </tree>

How should I fix this? Should I have 2 trees or 2 main field, each for air and ocean? How can I set-up the condition to display which tree?

アバター
破棄
最善の回答

column_invisible works on the parent or context. In your case, you should use

<field name="voyage_no" column_invisible="parent.transport != 'ocean'"/> 
<field name="flight_no" column_invisible="parent.transport != 'air'"/>
アバター
破棄
最善の回答

You don’t need two tree views. Just use attrs to control visibility like this:

<field name="flight_no"

       attrs="{'invisible': [('transport', '!=', 'air')], 'readonly': [('transport', '!=', 'air')]}"

       string="Flight No"/>


<field name="voyage_no"

       attrs="{'invisible': [('transport', '!=', 'ocean')], 'readonly': [('transport', '!=', 'ocean')]}"

       string="Voyage No"/>


アバター
破棄

Don't use attrs, its odoo 17

最善の回答

Hi,


Try with the following code.


<tree>
<field name="name" string="Carriage"/>
<field name="arrival_datetime"/>
<field name="flight_no" column_invisible="parent.transport != 'air'"/>
<field name="voyage_no" column_invisible="parent.transport != 'ocean'"/>
<field name="transport"/>
<field name="line_added" column_invisible="1"/>
<button name="action_insert_line_service" type="object" string="Add to Service" icon="fa-plus-square-o"/>
</tree>



Hope it helps

アバター
破棄
著作者 最善の回答

It is not solved!

I do not have enough karma points to reply to Abhay Singh's answer, but as indicated, I am using Odoo version 17, and attrs is deprecated. Also if the invisible tag is used, there will still be the column though the values will not be displayed that is why I tried to use the column_invisible tag

アバター
破棄
関連投稿 返信 ビュー 活動
5
8月 25
1322
1
2月 25
12231
0
11月 24
1135
0
5月 24
1327
1
1月 22
4544