3

我有这个模型:

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

我做了一些研究,发现了 2 个应用程序,treebeard.al_tree 和 Django MPTT,它们都很强大,可能会导致性能降低或难以维护。

我将在网站的侧边栏和管理页面中显示类别(包括帖子模型中的 ForeignKey),对类别的添加/修改/删除将非常少,主要是只读,对性能没有太大影响。

是否有任何其他应用程序提供此功能并且比上述应用程序更简单?我可以使用 Django 实现这一点而无需额外的应用程序,使用管理器或其他东西吗?

4

3 回答 3

4

我没有看到使用 django-mptt 之类的应用程序有任何缺点。事实上,它提供的方法经过优化,可以在使用分层结构进行查询时为您提供最大的性能。我没有理由担心可维护性和/或性能,而且它很容易使用!

于 2010-12-02T11:17:30.713 回答
4

MPTT 或 treebeard 可能会导致性能下降?废话。这些应用程序的全部意义在于它们提供了高度优化的算法,从而大大提高了性能。MPTT 允许您通过单个数据库操作获取整棵树或其中的子部分,否则需要多次单独调用。

于 2010-12-02T11:19:50.343 回答
2

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

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

Django MPTT(尤其是 v0.4)有一些很好的 API 可以在管理和模板中正确显示所有这些数据。您不必重新发明轮子。

于 2010-12-02T11:21:48.970 回答