【发布时间】:2011-05-05 12:43:38
【问题描述】:
如何为 Django 创建 Postgres ltree 数据类型?以及如何将它与 QuerySets 一起使用? (创建包装器?如何?)
这里关于lree: http://www.postgresql.org/docs/current/static/ltree.html
这里关于 Django 中的自定义字段: docs.djangoproject.com/en/1.2/howto/custom-model-fields/
附: 还有"Django Tree Libraries",但ltree看起来更好..
【问题讨论】:
-
django-mptt 有什么问题?我已经使用了一段时间(和其他人一样),效果很好。
-
django-mptt 使用嵌套集模型 (en.wikipedia.org/wiki/Nested_set_model)。是的,这是一个很好的模型,但它针对快速阅读进行了优化(如果您只在您的网站上生成内容,那么它是最好的解决方案,用户大多阅读而不是创建)。如果您允许用户生成内容并且您的树很大(每个插入系统都会更新很多项目),那不是很好。还有一篇有趣的文章davidcramer.net/code/django/6939/… 和基准测试tabo.pe/projects/django-treebeard/docs/1.61/benchmarks.html
-
如何在数据库中存储树木? 1. 嵌套集 (django-mptt, django-treebeard, django-easy-tree) - 适合读取操作(也有嵌套间隔,抱歉,对我来说太复杂了,没有适用于 django 的应用程序); 2. 邻接列表 (django-treebeard) - 如果树的深度不是很大,那么简单的方法。 3. 物化路径(django-treebeard 或 ltree(如果使用 postgres)) - 对我来说最好的方式,因为很多写操作。因此,如果我的问题不成功,对我来说最好的方法 - 使用物化路径(django-treebeard)。
-
关于您对“ltree 看起来更好”的评论,您可能想弄清楚您将从 ltree 中获得什么(参见 stackoverflow.com/questions/59132388/…)
标签: django postgresql django-models tree django-queryset