我正在使用来自get_cached_trees()的django mptt库方法
就像在文档中一样:
获取MPTT中模型对象的列表/查询集(深度优先),并缓存每个节点上的子节点和父节点。这允许在树中上下遍历,而不需要进一步的查询。
我正在跟踪这样的db查询:
>>> from django.conf import settings
>>> settings.DEBUG = True
>>> from django.db import connection
>>> Model.objects.count()
>>> # python 3 uses print()
>>> print(len(connection.queries))取自这里。
那我就知道
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?它不应该对DB进行查询。
发布于 2019-07-11 12:20:53
您应该使用get_children(),它不会影响DB的任何额外时间。
cache[0].get_children()
print(len(connection.queries)) # 4通常,缓存的属性:children和parent
https://stackoverflow.com/questions/56989049
复制相似问题