Python 练习调用内部函数
我与表有父/子关系。看起来像这样Python 练习调用内部函数,python,django,django-models,Python,Django,Django Models,我与表有父/子关系。看起来像这样 class Person(models.Model): Name = models.CharField() class ParentChild(models.Model): child = models.ForeignKey('Person', related_name='child') parent = models.ForeignKey('Person', related_name='parent') validfrom =
class Person(models.Model):
Name = models.CharField()
class ParentChild(models.Model):
child = models.ForeignKey('Person', related_name='child')
parent = models.ForeignKey('Person', related_name='parent')
validfrom = models.DateTimeField(blank=True, null=True)
validto = models.DateTimeField(blank=True, null=True)
我试图查询整个树并创建一个json发送到模板。
因此,对于每个人,我想使用一个函数来查询孩子,对于每个孩子,使用相同的函数来查询孩子是否有孩子
这就是我的函数
def getChildren(parentID):
try:
children = Person.objects.filter(parent=parentID)
addJson = 'children: ['
for a in children:
addJson = addJson + '{text: { name: "Child '+str(a.id)+'" }},'
addJson = getChildren(str(a.id))
return addJson
except:
return addJson
这只给了我一个孩子,再也没有了。所以我猜不可能调用自身,或者函数必须在再次调用之前完成
我现在很困。欢迎提出意见 我解决了这个问题。我没有注意到这个查询是针对错误表中的PK的
def getChildren(parentID, jsonData):
try:
qChildren = ParentChild.objects.filter(parent=parentID).values('child')
addJson = jsonData + 'children: ['
for a in qChildren:
addJson = addJson + '{text: { name: "Child ' + str(a['child']) + '" }},'
addJson = getChildren(str(a['child']), addJson)
addJson = addJson + ']'
return addJson
except:
return None
我解决了这个问题。我没有注意到这个查询是针对错误表中的PK的
def getChildren(parentID, jsonData):
try:
qChildren = ParentChild.objects.filter(parent=parentID).values('child')
addJson = jsonData + 'children: ['
for a in qChildren:
addJson = addJson + '{text: { name: "Child ' + str(a['child']) + '" }},'
addJson = getChildren(str(a['child']), addJson)
addJson = addJson + ']'
return addJson
except:
return None
但实际上,对于一个树结构,你应该使用这样的东西,这样会更有效率。但当父/子关系设置为一个时间框架时,现在似乎无法实现。我只发现,如果树是固定的,mptt是有用的。对我来说,关系会改变,我需要保持关系的历史。你的猜测是函数不可能调用它自己是不正确的。这是完全有可能的。因此,问题在于你的代码,而不是任何假定的无法进行递归调用。但实际上,对于一个树结构,你应该使用这样的东西,这样会更有效率。@DanielRoseman我在其他事情中也使用过它。但当父/子关系设置为一个时间框架时,现在似乎无法实现。我只发现,如果树是固定的,mptt是有用的。对我来说,关系会改变,我需要保持关系的历史。你的猜测是函数不可能调用它自己是不正确的。这是完全有可能的。因此,问题在于您的代码,而不是假定无法进行递归调用。