获取所有父'对象'?
我需要从子对象获取所有的父对象。我不知道会有多少个父对象,所以我觉得这里可能需要用到递归。
我有一个对象,它可能有也可能没有其他继承的对象。如果它有继承的对象,我需要把那个对象的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。所以我想在这里加入递归,获取所有其他的父对象,但我不知道该怎么正确地实现。有没有人能帮帮我?
附注:
我看到有人问像 cr, uid
这样的东西是什么意思,我没有具体说明,因为我觉得这和问题无关(其实确实无关),但为了让大家明白,这些输入是在OpenERp框架方法中需要的:
`cr` - database cursor
`uid` - current user id
`ids` - ids of the object
不过正如我所说,这些和问题没有关系,我只是贴出了一个有效的方法,以免遗漏任何东西。
1 个回答
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