我正在使用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分?应该不对数据库进行查询。
答案 0 :(得分:0)
您应该使用get_children()
,它不会花费额外的时间。
cache[0].get_children()
print(len(connection.queries)) # 4
通常,已缓存的属性:children
和parent