Django的高效树形数据结构
项目描述
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.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 570e9e05647790161632f833f82de7c51679333eb6e3cd26a01c1c359dc41221 |
|
MD5 | a310f64f6b0267d009fe67ae225558fc |
|
BLAKE2b-256 | 5322c674ae07363ac95189da024a5a70167b5841107912117508fc5343c96c79 |
关闭
django_closuretree-1.2.0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 2c95e04838e88e178b8d586986107ffe55fbe76dc06517005664a7061d078caa |
|
MD5 | 9efc71899e5f0e5362cf8f48cd139501 |
|
BLAKE2b-256 | ddd7291593199ef5a502ea8cb02b010cdf8b379fd2e188bd41c1c6a2ba035047 |
关闭
django_closuretree-1.2.0-py2-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 98df2492e513ccd3c8ae6c04f0aa487d2b1adb571622bb8e42aee8ffd33a4f96 |
|
MD5 | b9543fd70effb0ab7f8b7c4eb0aef0cd |
|
BLAKE2b-256 | a3b1b6672596799a576a9cef096a41c3c8f22af69e32c984d9d3e91e3d7bf32b |