Скажи, у меня есть экземпляр продукта.Экземпляр продукта связан с дочерней категорией 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')
Но этот запрос неэффективен, когда уровень глубины неизвестен.Есть ли способ предварительно выбрать родителей динамически в запросе выше?