Django mptt get_cached_trees()命中数据库

时间:2019-07-11 12:20:53

标签: python django django-mptt

我正在使用django mptt library中的get_cached_trees()方法

与文档中一样:

  

以MPTT左(深度优先)顺序获取模型对象的列表/查询集,并在每个节点上缓存子级和父级。这样可以在整个树中进行上下遍历,而无需进一步查询。

我正在跟踪这样的数据库查询:

>>> from django.conf import settings
>>> settings.DEBUG = True
>>> from django.db import connection
>>> Model.objects.count()
>>> # python 3 uses print()
>>> print(len(connection.queries))

来自here

然后我做

MyModel.objects.count()
print(len(connection.queries)) # 1

然后

first_object = MyModel.objects.first()
root_object = first_object.get_root()
print(len(connection.queries)) # 3

然后

cache = root_object.get_cached_trees()  
print(len(connection.queries)) # 4

然后

cache[0].get_descendants()
print(len(connection.queries)) # 5

为什么在最后一步给了我5分?应该不对数据库进行查询。

1 个答案:

答案 0 :(得分:0)

您应该使用get_children(),它不会花费额外的时间。

cache[0].get_children()
print(len(connection.queries)) # 4

通常,已缓存的属性:childrenparent