发布时间:2020-12-18 11:05:10 作者:佚名 阅读:(114)
最近在做operp的项目有一个需求需要用到openerp创建动态视图,接下来吾爱编程就为大家介绍一下重写fields_view_get函数来实现我们创建动态视图的需求,有需要的小伙伴可以参考一下:
openerp的视图结构是以XML的格式存放于ir.ui.view表中,属于静态格式,设计之后就固定
但可以通过在model中重写fields_view_get函数,在视图加载时修改arch属性,动态修改视图的结构
def fields_view_get(self, cr, uid, view_id=None,view_type='form',context=None,toolbar=False,submenu=False): ip_obj = self.pool.get('hr.rule.input') res = super(hr_inputs_editor,self).fields_view_get(cr,uid,view_id,view_type,context,toolbar,submenu) if view_type=='form': treev = res['fields']['line_ids']['views']['tree'] doc = etree.XML(treev['arch']) for node in doc.xpath("/tree/field"): name = node.get('name',False) if name.startswith('value'): name = name.replace('value','input') + '_code' cd = context.has_key(name) and context[name] or False if cd: ip_ids = ip_obj.search(cr,uid,[('code','=',cd)],limit=1,context=context) if ip_ids: text = ip_obj.read(cr,uid,ip_ids,['name'])[0]['name'] node.set('string',text) else: node.set('modifiers','{"tree_invisible":true}') treev['arch'] = etree.tostring(doc) return res
注意,必须是通过etree将res['arch']加载到DOM中,通过xpath查找并set修改属性,然后将修改后的dom通过etree.tostring(doc)写回res['arch']
如果要修改一对多字段下的子视图时,需要先运算到子视图,如:
treev = res['fields']['line_ids']['views']['tree']
以上就是吾爱编程为大家介绍的关于重写fields_view_get函数来实现openerp创建动态视图的全部内容了,希望对大家有所帮助,了解更多相关文章请关注吾爱编程网!
欢迎分享转载→ openerp创建动态视图-fields_view_get
pip常用命令
发布时间:2021-01-11完美解决:You are using pip version 18.1, however version 19.3.1 is available
发布时间:2020-12-28You are using pip version 20.2.4 however, version 20.3.3 is available.
发布时间:2020-12-28python的scikit-learn将特征转成one-hot特征_python sklearn one-hot
发布时间:2020-12-24openerp创建动态视图-fields_view_get
发布时间:2020-12-18© 2015-2021 - 吾爱编程网 版权所有 苏ICP备18033726号-1关于我们 - 网站声明 - 联系我们