django的高效树型数据结构

django-closuretree的Python项目详细描述


Build StatusCode Health BadgeDocumentation StatusTest CoverageVersion BadgeLicense Badge

django-closuretree是为Django应用程序设计的closure tree技术的一个实现,旨在提供对关系数据库中tree-based structures的有效查询。其目标是减少查询给定对象的子对象或父对象时所需的查询数。

给定以下模型:

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

可以使用以下命令查询每个模型的子模型:

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

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

fromclosuretree.modelsimportClosureModelclassNode(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 install django-closuretree安装django-closuretree
  • closuretree.models.ClosureModel而不是django.db.models.Model继承模型。

就这样。现在可以在模型实例上使用get_descendants()get_ancestors()

如果将此添加到已经在数据库中已有数据的应用程序中,则需要在关闭树中填充现有数据:

之前,运行每个模型的^ {tt9} $方法。
Node.rebuildtable()

贡献

若要贡献,请分叉回购,完成工作,然后发出拉取请求。我们要求贡献者遵守PEP8标准,并包括对其所有代码的完整测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将外部库(LIB)集成到grails项目中?   java 安卓:progressTintMode、安卓:secondaryProgressTintMode和安卓:progressDrawable做什么?   java获得了启动播放器的精确方向   java如何在布局/样式XML中设置状态栏着色颜色?   Java中的图形游戏未显示   java如何在WebSphere8.5.5中的我的JAAS自定义登录模块中使用SAML令牌属性值   使用jackson spring API解析嵌套json   java如何从用户请求中获取用户代理?   Netbeans 6.8中的java UI控件定位   java显示listgrid中两个表中的数据   java Google Cloud Bigtable客户端连接池   Vert中的java更改日志级别。通过添加一个配置文件   java调用构造函数是否意味着创建实例?   java getFrom()[0])中[0]用于获取邮件发件人地址的用法是什么   “继续”标志的java Gradle属性?   jakarta ee如何在java ee中创建GUID   java不兼容类型:无法将int转换为整数   java需要借助DefaultHandler的characters函数将XML数据读入安卓应用程序   java mapstruct将方法应用于列表中的所有对象