我想用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
}
)