Я использую get_cached_trees()
метод из библиотеки django mptt
Как в документации:
Принимает список / набор запросов объектов модели в 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))
Взято из здесь .
Затем я делаю
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?Предполагалось, что не будет делать запрос к БД.