как предварительно выбрать родителей ребенка на дереве mptt с помощью django prefetch_related? - PullRequest
1 голос
/ 02 мая 2019

Скажи, у меня есть экземпляр продукта.Экземпляр продукта связан с дочерней категорией 4-го уровня.Если я хочу получить только корневую категорию и дочернюю категорию 4-го уровня, то приведенного ниже запроса достаточно для извлечения данных с минимальными запросами к базе данных:

Product.objects.filter(active=True).prefetch_related('category__root',
                                                     'category')

Если мне нужно связаться с родителями категории этого продукта и использовать get_ancestors()Для этого почти три раза происходит запрос к базе данных.

Если я напишу запрос, как показано ниже, вместо использования метода get_ancestors(), запросы к базе данных останутся низкими.

Product.objects.filter(active=True).prefetch_related(
    'category__root',
    'category', 
    'category__parent',
    'category__parent__parent',
    'category__parent__parent__parent',
    'category__parent__parent__parent__parent')

Но этот запрос неэффективен, когда уровень глубины неизвестен.Есть ли способ предварительно выбрать родителей динамически в запросе выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...