Я хотел бы разработать дерево генеалогии с 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, но у меня только один результат, он показывает только текущего животного , но он не получает ни его мать, ни бабушку.
Я пытаюсь использовать этот код с любым деревом для генерации дерева:
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
}
)