Django - 处理树形结构

2 投票
1 回答
2178 浏览
提问于 2025-04-16 10:20

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

我想给Entity模型(顺便说一下,也包括Person)添加层级功能。

我有个问题:考虑到我更看重系统的稳定性和易于维护,而不是超快的查询速度(不过,如果在大约2000个叶子和节点的Entity中查询速度太慢,那也是不行的),你推荐哪种实现方式呢?

1) 在SQL数据库中实现一个嵌套集合的层级树,通过正常的字段操作来访问;或者

2) 在Django外部实现一个常规的Python树(比如Node类),通过Django模型的方法来访问层级信息?

谢谢,

Mike

1 个回答

2

我觉得你提到的选择其实并不是完全对立的——无论你最后选择什么,都会涉及到一些数据库的内容和一些非数据库的内容。

我非常喜欢“修改过的先序树遍历”算法,它在Django中的实现也很棒,叫做 django-mptt

不过,如果你真的想用嵌套集合的话,可以看看 django-treebeard,它提供了嵌套集合、邻接列表和物化路径等功能。

撰写回答