2011-01-20 93 views
2

我使用Django具有以下(简化)型号:Django的 - 管理树形结构

class Entity(models.Model): 
    name = models.CharField(max_length=30) 

class Person(models.Model): 
    last_name = models.CharField(max_length=30) 
    first_name = models.CharField(max_length=30) 
    entity = models.ForeignKey(Entity) 

我想层次功能添加到实体模型(以及由此延伸,对个人)。

问题:考虑到我喜欢系统稳定性和易于维护,而不是尖叫快速的查询速度(尽管跨越2000叶和节点实体的查询速度不可接受会很糟糕),您推荐哪种实现。

1)将层次结构树作为SQL数据库中的嵌套集实现,以便通过正常的现场操作进行访问;或

2)在Django之外以普通Python树(例如Node类)的形式实现层次结构树,通过Django模型方法访问层次结构信息?

感谢,

迈克

回答

2

我不认为你的选择真的是相互排斥的 - 任何你最终做会有一些数据库和一些非数据库元素。

我是Modified Pre-Order Tree Traversal算法及其优秀的Django实现django-mptt的忠实粉丝。

但是,如果您在嵌套集上死了,请查看django-treebeard,其中提供了相邻列表和物化路径。