Python - Как создать генеалогическое дерево - PullRequest
0 голосов
/ 19 марта 2019

Я хотел бы разработать дерево генеалогии с 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
    }
)
...