Python-如何创建家谱树

时间:2019-03-19 13:10:47

标签: python recursion anytree

我想用Python开发家谱树。

我正在使用Django Framework 2.1。

我有一个名为“动物”的模型:

class Animal(models.Model):
    id = models.AutoField(primary_key=True)
    birth_date = models.DateField( null=True)
    id_mother = models.ForeignKey('self', on_delete=models.PROTECT, null=True)

Python中是否存在一种从该对象递归生成树的方法?我尝试了AnyTree,但得到的只是一个结果,它只显示当前的动物,但没有得到他的母亲,也没有祖母。

我正在尝试将此代码与anytree一起使用以生成树:

from anytree import Node, RenderTree, AsciiStyle

    def generate_tree(beginningId):
        if isinstance(beginningId, int):
            animal = Animal.objects.get(pk=beginningId)
        else:
            animal = Animal.objects.get(pk=beginningId.id)

        animalNode = Node(animal)

        if animal.id_mother is not None:
            generate_tree(animal.id_mother).parent = animalNode

        return animalNode

查看:

def show_tree(request):
tree = generate_tree(221)
nt = RenderTree(tree, style=AsciiStyle())

print(nt)

return render(
    request, 
    'agr/reports/tree.html', 
    {
        'tree': tree, 
        'page_title': page_title
    }
)

0 个答案:

没有答案