我需要从子对象获取所有父对象。我不知道它会有多少个父对象,所以我想我需要以某种方式使用递归。
所以我有一个对象,可能有或没有其他继承的对象。如果它有任何继承对象,我需要将对象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
但正如我所说,这些与问题无关,我只是发布工作方法,不要错过任何东西。
答案 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