Моделирование полиморфного дерева с помощью 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%, что это хорошая идея, но это, по крайней мере, сохранило дерево, как я и надеялся.