Моделирование полиморфного дерева с помощью django-treebeard

Я не могу найти способ добавить узлы различных полиморфных типов в одно и то же дерево. По сути, я думаю, что мне нужно дерево, узлами которого являются либо компания, либо регион, оба наследуются от HierarchyNode, который наследуется от MP_Node

class HierarchyNode(MP_Node):
    name = models.CharField(max_length=30)

class Company(HierarchyNode):
    pass

class Region(HierarchyNode):
    pass

Добавить корневой узел компании просто

c1 = Company.add_root(name='Company 1')

Но я не могу понять, как добавить регион в качестве ребенка c1

c1.add_child(name='Region 1') # adds a Company named Region 1
c1.add_child(Region(name='Region 1')) # isn't valid

Есть ли способ сделать это? Разве API не позволяет этого, потому что это плохая идея? Есть ли более подходящий способ смоделировать эту концепцию? В качестве альтернативы, я полагаю, у меня могло бы быть дерево HierarchyNode, которое имеет отношение один к одному с типами Company/Region.

1 ответ

Хорошо, после просмотра кода для django-treebeard, способ сделать это:

c1.add_child(instance=Region('Region 1'))

Я все еще не уверен на 100%, что это хорошая идея, но это, по крайней мере, сохранило дерево, как я и надеялся.

Другие вопросы по тегам