Django:简单层次结构的最佳方式?

2024-05-15 06:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个型号:

class Category(models.Model):
    name = models.CharField()
    description = models.CharField(blank=True)
    parent = models.ForeignKey('self', blank=True, null=True)

我希望Django根据其层次结构对类别进行排序,例如:

  • 父级1
    • 儿童1
  • 家长2
    • 儿童1

我做了一些研究发现了两个应用程序,乔木和Django MPTT,两者都很强大,这可能会导致性能下降或更难维护。在

我将显示在网站的侧边栏和内部管理页面的类别(包括ForeignKey在posts模型),将有非常低的添加/修改/删除类别,主要是阅读,应该不会有太大的影响性能。在

有没有其他的应用程序可以提供这个而且比上面的更简单? 我可以使用Django而不使用其他应用程序,使用管理器或其他东西来实现这一点吗?在


Tags: djangonametrue应用程序modelmodels性能类别
3条回答

我没有看到任何反对者使用django mptt这样的应用程序。事实上,它提供的方法经过了优化,使您在使用层次结构进行查询时获得最大的性能。我没有理由担心可维护性和/或性能,而且它非常容易使用!在

MPTT或treebeard可能导致性能降低?胡说。这些应用程序的全部意义在于它们提供了高度优化的算法,极大地提高了性能。MPTT允许您使用单个数据库操作获取整个树或其中的子部分,否则将需要许多单独的调用。在

使用MPTT可以使系统运行。当您自己实现它时,您可能最终会手动将节点连接在一起(一个大约30行的函数),或者对所有子级执行单独的查询。很多体力活,在那里,做过。在

使用MPTT算法,可以在一个查询中获取子树。 存储分层数据是一种常见的算法。在

djangomptt(特别是v0.4)有一些很好的API,可以在管理和模板中正确地显示所有这些数据。你不必重新发明轮子。在

相关问题 更多 >

    热门问题