Django - 管理树结构

时间:2011-01-20 20:39:33

标签: python django django-models

我正在使用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)

我想将层次结构功能添加到实体模型(并且,通过扩展,添加到Person)。

问题:你推荐哪种实现方式,因为我支持系统稳定性和易于维护而不是尖叫 - 快速查询速度(尽管〜2000叶子和节点实体的查询速度不可接受会很糟糕)。

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

2)在Django之外实现层次树作为常规Python树(例如Node类),通过Django模型方法访问层次结构信息?

谢谢,

麦克

1 个答案:

答案 0 :(得分:2)

我不认为您的替代方案是真正相互排斥的 - 您最终做的任何事情都会有一些数据库和一些非数据库元素。

我非常喜欢Modified Preorder Tree Traversal算法及其出色的Django实现django-mptt

如果您在嵌套集上已经设置了,请查看django-treebeard,它提供了相邻列表和物化路径。