首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django mptt get_cached_trees()命中数据库

Django mptt get_cached_trees()命中数据库
EN

Stack Overflow用户
提问于 2019-07-11 12:20:53
回答 1查看 730关注 0票数 0

我正在使用来自get_cached_trees()django mptt库方法

就像在文档中一样:

获取MPTT中模型对象的列表/查询集(深度优先),并缓存每个节点上的子节点和父节点。这允许在树中上下遍历,而不需要进一步的查询。

我正在跟踪这样的db查询:

代码语言:javascript
复制
>>> from django.conf import settings
>>> settings.DEBUG = True
>>> from django.db import connection
>>> Model.objects.count()
>>> # python 3 uses print()
>>> print(len(connection.queries))

取自这里

那我就知道

代码语言:javascript
复制
MyModel.objects.count()
print(len(connection.queries)) # 1

然后

代码语言:javascript
复制
first_object = MyModel.objects.first()
root_object = first_object.get_root()
print(len(connection.queries)) # 3

然后

代码语言:javascript
复制
cache = root_object.get_cached_trees()  
print(len(connection.queries)) # 4

然后

代码语言:javascript
复制
cache[0].get_descendants()
print(len(connection.queries)) # 5

为什么在最后一步它给我5?它不应该对DB进行查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 12:20:53

您应该使用get_children(),它不会影响DB的任何额外时间。

代码语言:javascript
复制
cache[0].get_children()
print(len(connection.queries)) # 4

通常,缓存的属性:childrenparent

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56989049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档