Help

2

fields_view_get() dinamically modify view (one2many tree view)

I'm trying to modify layout of the tree view for one2many field in sale.order.

This is my code,

@api.model

def fields_view_get(self, view_id=None, view_type=False, context=None,

toolbar=False, submenu=False):

res = super(saleOrder,

self).fields_view_get(view_id=view_id, view_type=view_type,

toolbar=toolbar, submenu=submenu)

if view_type == 'form':

doc = etree.XML(res['arch'])

for node in doc.xpath("//field[@name='order_line']/tree//field[@name='product_id']"):

node.set('invisible', 'True')

res['arch'] = etree.tostring(doc)

return res


After debug, only   //field[@name='order_line'], appears.

can't find  'product_id'.

1 Comment
Avatar
Discard

Hi Juan,

Did you found any solution fot this Issues?

3 Answers
0
Avatar
Kabeer KB
Best Answer

Try below code

       if view_type =='form':
            doc = etree.XML(result['fields']['order_line']['views']['tree']['arch'])
            node = doc.xpath("//field[@name='product_id']")[0]
            node.set('invisible','1')
            result['fields']['order_line']['views']['tree']['arch'] = etree.tostring(doc)
        return result

Hope it will help you.

Avatar
Discard
0
Best Answer

I can't do it in the xml file, because i have to show/hide the column, depending of attributes like company_id.

Since now i can't find 'order_line <tree> columns in the doc.xpath, so i cannot replace or hide the fields.


Kind regards.

1 Comment
Avatar
Discard
Avatar
Muhammad Irfan
-

Hi Juan! Do you have any luck with this problem?

0
Best Answer

try this.

from openerp.osv.orm import setup_modifiers


if doc.xpath("//field[@name='order_line']/tree//field[@name='product_id']"):

    node = doc.xpath("//field[@name='order_line']/tree//field[@name='product_id']")[0]

    node.set('invisible', '1')

    setup_modifiers(node, res['fields']['product_id'])

res['arch'] = etree.tostring(doc)

return res

OR

<xpath expr="//field[@name='order_line']//tree//field[@name='product_id']" position="attributes">

           attribute name="invisible">1</attribute>

</xpath>





I hope it's useful for you. 

2 Comments
Avatar
Discard

Thanks in advance for your help,

the problem is that

doc.xpath("//field[@name='order_line']/tree//field[@name='product_id']")

returns an empty element, [ ]

only finds

doc.xpath("//field[@name='order_line']")

cannot find the elements of the one2many field 'order_line'.

Kind regards.

batter so you can use xpath from form view like

<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']" position="attributes">

<attribute name="invisible">1</attribute>

</xpath>