Та же ситуация, что и Django prefetch_related детей детей , но другой вопрос:
У меня есть модель Node
, которая выглядит примерно так:
class Node(models.Model):
parent = models.ForeignKey('self', related_name='children', on_delete=models.CASCADE, null=True)
Узел может иметь несколько детей, и каждый из этих детей может иметь своих собственных детей.
Я бы хотел сделать что-то подобное:
def cache_children(node):
for child in node.children.all():
cache_children(child)
root_node = Node.objects.prefetch_related('children').get(pk=my_node_id)
all_nodes = Node.objects.all() # get all the nodes in a single query
# Currently: hit database for every loop
# Would like: to somehow use the already loaded data from all_nodes
cache_children(root_node)
Поскольку я уже собрал все узлы в запросе all_nodes
, я хотел бы повторно использовать кэшированные данные из этого запроса вместо того, чтобы каждый раз выполнять новые.
Есть ли способ достичь этого?