获取所有父对象'对象'?

时间:2014-03-31 05:43:16

标签: python recursion openerp

我需要从子对象获取所有父对象。我不知道它会有多少个父对象,所以我想我需要以某种方式使用递归。

所以我有一个对象,可能有或没有其他继承的对象。如果它有任何继承对象,我需要将对象id添加到列表中,然后检查该继承对象(或对象)是否有父对象,如果有,则将这些父对象id添加到同一列表中并检查其父对象等等。当最深的物体没有任何父母时,它应该停止。

所以我的代码现在看起来像这样:

def get_parent_groups(self, cr, uid, ids, grp_id, context=None):
    res = [] # list for parent ids
    grp_obj = self.pool.get('res.groups')
    #grp_id is childs `id` it means same thing as 
    # `parent_grp.id`, only that latter is parent object id.
    grp = grp_obj.browse(cr, uid, grp_id) 
    if grp.implied_ids: #check if child has any parent ids
        for parent_grp in grp.implied_ids:
            res.append(parent_grp.id) #append found parent ids
    return res

此代码仅获取第一个父对象ID。所以从这里我想我应该把递归和其他所有的父母,但我无法理解我应该如何正确地得到它。有什么帮助吗?

P.S。 正如我看到有人询问cr, uid之类的含义,我没有指定它,因为我认为它与此问题无关(因为它实际上并非如此),但为了明确这些输入是需要的OpenERp框架方法:

`cr` - database cursor 
`uid` - current user id
`ids` - ids of the object

但正如我所说,这些与问题无关,我只是发布工作方法,不要错过任何东西。

1 个答案:

答案 0 :(得分:0)

我这样解决了这个问题的重写方法。不知道这种方式是否是最佳方式,但它正在发挥作用:

def get_parent_groups(self, cr, uid, ids, grp_id, context=None):
    res = []     
    grp_obj = self.pool.get('res.groups')
    grp = grp_obj.browse(cr, uid, grp_id)
    if grp.implied_ids:
        for parent_grp in grp.implied_ids:
            res.append(parent_grp.id)            
            if parent_grp.implied_ids:
                parent_ids = self.get_parent_groups(cr, uid, ids, parent_grp.id)
                for parent_id in parent_ids:
                    res.append(parent_id)
    return res