程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> openerp創建動態視圖-fields_view_get

openerp創建動態視圖-fields_view_get

編輯:Python

openerp的視圖結構是以XML的格式存放於ir.ui.view表中,屬於靜態格式,設計之後就固定,

但可以通過在model中重寫fields_view_get函數,在視圖加載時修改arch屬性,動態修改視圖的結構

[python] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. def fields_view_get(self, cr, uid, view_id=None,view_type='form',context=None,toolbar=False,submenu=False):  
  2.         ip_obj self.pool.get('hr.rule.input')  
  3.         res super(hr_inputs_editor,self).fields_view_get(cr,uid,view_id,view_type,context,toolbar,submenu)  
  4.         if view_type=='form':  
  5.             treev res['fields']['line_ids']['views']['tree']  
  6.             doc etree.XML(treev['arch'])  
  7.             for node in doc.xpath("/tree/field"):  
  8.                 name node.get('name',False)  
  9.                 if name.startswith('value'):  
  10.                     name name.replace('value','input') '_code'  
  11.                     cd context.has_key(name) and context[name] or False  
  12.                     if cd:  
  13.                         ip_ids ip_obj.search(cr,uid,[('code','=',cd)],limit=1,context=context)  
  14.                         if ip_ids:  
  15.                             text ip_obj.read(cr,uid,ip_ids,['name'])[0]['name']  
  16.                             node.set('string',text)  
  17.                     else:  
  18.                         node.set('modifiers','{"tree_invisible":true}')  
  19.             treev['arch'] etree.tostring(doc)  
  20.         return res 

注意,必須是通過etree將res['arch']加載到DOM中,通過xpath查找並set修改屬性,然後將修改後的dom通過etree.tostring(doc)寫回res['arch']

如果要修改一對多字段下的子視圖時,需要先運算到子視圖,如:

[python] view plaincopy在CODE上查看代碼片派生到我的代碼片treev res['fields']['line_ids']['views']['tree']
*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved