我有树状数据模型(id - parent)。我有递归方法,让所有孩子都获得当前页面。
children = []
class Page(models.Model):
...
def get_children(self, include_self=True):
global children
if include_self:
children.append(self.id)
for c in Page.objects.filter(parent=self.id):
c.get_children(True)
return children
我使用控制台进行测试:
>>> from pages.models import Page
>>> q = Page.objects.get(id=10) #I get a page with children.
>>> q.get_children(False)
工作正常:
[12L, 11L]
但是,如果我下次使用这种方法,
q.get_children(False)
结果将是:
[12L, 11L, 12L, 11L]
我想永远拥有:
[12L, 11L]
做错了什么?我应该如何重置变量但安全的递归范围?
修改
正确的递归函数是:
def get_children(self, include_self=True, children = None):
if children is None:
children = []
if include_self:
children.append(self.id)
for c in Page.objects.filter(parent=self.id):
c.get_children(True)
return children