码迷,mamicode.com
首页 > 其他好文 > 详细

openerp创建动态视图-fields_view_get

时间:2014-07-14 10:05:02      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   art   for   

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]

openerp创建动态视图-fields_view_get,布布扣,bubuko.com

openerp创建动态视图-fields_view_get

标签:style   blog   color   os   art   for   

原文地址:http://www.cnblogs.com/chjbbs/p/3837497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!