Pular para o conteúdo
Menu
Esta pergunta foi sinalizada
4 Respostas
1025 Visualizações

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?

Avatar
Cancelar
Melhor resposta

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'"/>
Avatar
Cancelar
Melhor resposta

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


Avatar
Cancelar

Don't use attrs, its odoo 17

Melhor resposta

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

Avatar
Cancelar
Autor Melhor resposta

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

Avatar
Cancelar
Publicações relacionadas Respostas Visualizações Atividade
5
ago. 25
1324
1
fev. 25
12232
0
nov. 24
1137
0
mai. 24
1327
1
jan. 22
4545