我需要能够在组织结构图类型的情况下创建多个节点。这些需求要求一个“子”节点能够有多个父节点,因此像mptt
或treebeard
这样的现有解决方案不幸出局
这些要求还指出,我应该能够访问任何级别的节点,并能够基于其子节点进行业务处理
以下是我的尝试:
class Division(models.Model):
name = models.CharField(
max_length=250,
)
children_set = models.ManyToManyField(
to='organisations.Division',
related_name='parent_set',
)
def _flatten_children(self, el):
for item in el.children_set.all():
if bool(item.children_set.count()):
yield from self._flatten_children(item)
else:
yield item
def all_children(self):
return list(self._flatten_children(self))
def add_child(self, child):
self.children_set.add(child)
打这个电话时,我似乎只听到了“最后一个”孩子的询问。任何帮助都将不胜感激
# test setup
instance = DivisionFactory()
child1 = DivisionFactory()
child2 = DivisionFactory()
child3 = DivisionFactory()
child4 = DivisionFactory()
instance.add_child(child1)
child1.add_child(child2)
child2.add_child(child3)
child2.add_child(child4)
输出:
In [19]: instance.all_children()
Out[19]: [<Division: Officia dolores illo.>, <Division: Vitae sapiente numquam.>]
请注意,仅返回了child2
的两个子节点,并且child1
和child2
都未包含在返回的列表中
当前代码只生成没有子项的项。你需要让他们都屈服(包括自己)
或
相关问题 更多 >
编程相关推荐