跳转到主要内容

Django的高效树形数据结构

项目描述

Build Status Code Health Badge Documentation Status Test Coverage Version Badge License Badge

django-closuretree 是一个针对 Django 应用程序的 闭包树 技术实现,旨在为关系数据库中的树形结构提供高效的查询功能。它的目标是减少查询给定对象的子对象或父对象时所需的查询次数。

给定以下模型

class Node(models.Model):
    name = models.CharField(max_length=24)
    parent = models.ForeignKey('self', related_name='children')

可以使用以下方式查询每个模型的子对象

Node.objects.get(name='A').children.all()

但是,对于递归查找,这会导致大量的查询。相反,django-closuretree 允许您一次性提取它们。

from closuretree.models import ClosureModel

class Node(ClosureModel):
    name = models.CharField(max_length=24)
    parent = models.ForeignKey('self', related_name='children', null=True)

a = Node.objects.create(name='A')
Node.objects.create(name='B', parent=a)

Node.objects.get(name='A').get_descendants()

单个查询将获取所有后代。

快速入门

  • 使用pip安装django-closuretree

  • closuretree.models.ClosureModel继承模型,而不是从django.db.models.Model继承。

这样就完成了。现在您可以在模型实例上使用get_descendants()get_ancestors()方法。

如果您正在将其添加到已包含数据库数据的现有应用程序中,您需要在每个模型上运行rebuildtable()方法,以便在闭包树中填充现有数据。

Node.rebuildtable()

贡献

要贡献,请分支仓库,完成您的修改,然后提交一个拉取请求。我们要求贡献者遵守PEP8标准,并为所有代码包含完整的测试。

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

django-closuretree-1.2.0.tar.gz (12.7 kB 查看散列)

上传时间: 源代码

构建分发

django_closuretree-1.2.0-py3-none-any.whl (12.0 kB 查看散列)

上传时间: Python 3

django_closuretree-1.2.0-py2-none-any.whl (12.0 kB 查看散列)

上传时间: Python 2

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页