练习在自己内部调用函数

时间:2017-11-21 08:15:04

标签: 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 = 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

这只会让我有一个孩子,仅此而已。所以我猜测它不可能自己调用​​,或者函数必须在被再次调用之前完成。

我现在很困难。很受欢迎!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我没有注意到该查询是针对错误表格中的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