【问题标题】:Django mptt get_cached_trees() hits databaseDjango mptt get_cached_trees() 命中数据库
【发布时间】:2019-11-21 03:55:58
【问题描述】:

我正在使用来自django mptt libraryget_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?它不应该对数据库进行查询。

【问题讨论】:

    标签: python django django-mptt


    【解决方案1】:

    你应该使用get_children(),它不会在任何额外的时间内击中数据库。

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

    一般来说,缓存的属性:childrenparent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多