【问题标题】:how to create ltree data type for Django?如何为 Django 创建 ltree 数据类型?
【发布时间】: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


【解决方案1】:

django-ltree 为您管理集成。它还具有在您的数据库中添加 ltree 扩展的迁移。

【讨论】:

    【解决方案2】:

    您列出了两个正确的部分。将 PostgreSQL 数据类型适配到 Django 的一般方法是:

    1. 创建一个表示数据类型的新 Python 类。
    2. 向 psycopg2 注册该数据类型,以便 psycopg2 了解如何使其适应数据库。

    第 2 步的文档可在http://initd.org/psycopg/docs/advanced.html#adapting-new-types 获得...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2023-03-09
      • 2021-05-22
      • 2021-06-19
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多