Django mptt get_cached_trees () обращается к базе данных - PullRequest
0 голосов
/ 11 июля 2019

Я использую 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?Предполагалось, что не будет делать запрос к БД.

1 Ответ

0 голосов
/ 11 июля 2019

Вы должны были использовать get_children(), это не бьет по БД в дополнительное время.

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

Обычно кэшируемые атрибуты: children и parent

...