在Django中制作可移植节点并使用它们来制作树

时间:2013-07-09 13:22:23

标签: python django django-models

我想要做的是可以使用C++中的指针非常简单地完成。我的想法就是这个,我有一个对象,它被称为Node。该节点将具有以下几个特征:

  1. 它通过父母和孩子与其他节点连接。
  2. 它可以被移植,它可以被移植,这意味着我可以接受这个节点,并将其粘贴到我想要的任何地方,它可以是另一棵树,或者我可以使用这个节点来完全开始一棵新树。
  3. 此外,这意味着您可以使用节点创建整个树。理想情况下,树将是具有一个中心最大祖父的节点的集合。

    但是,一个节点可以有两个甚至更多的父母。

2 个答案:

答案 0 :(得分:2)

这很容易实现,但我不建议在性能方面:

class YourModel(models.Model):
    parent = models.ForeignKey('YourModel', related_name='children')

    def siblings(self):
        return self.objects.filter(parent=self.parent_id).exclude(pk=self.pk)

用法:

some_child = YourModel.objects.get(...)
siblings = some_child.siblings()
parent = some_child.parent()
children = parent.children.all()

问题是,你想做什么?

答案 1 :(得分:0)

我建议您查看提供分层分类管理系统的第三方django-categories。您可以创建节点并将其粘贴到其他节点以创建树(具有父子关系)