Давайте отбросим комментарии. Код рабочий, он используется у меня в бложике. Меня интересуют не древовидные комментарии как таковые, а вот что.
На одном из форумов я наткнулся на способ быстрого построения дерева из массива, похожего на queryset, в один проход. Код был написан на php и выглядел следующим образом:
$items = array(
1 => array(
"parent_id" => null,
),
2 => array(
"parent_id" => 1,
),
3 => array(
"parent_id" => 1,
),
4 => array(
"parent_id" => 3,
),
);
foreach ($items as $id => &$item) {
if (!$id) continue;
$items[$item["parent_id"]]["children"][$id] = &$item;
}
var_dump($items[""]["children"]);
Я попытался перенести это на питон, но столкнулся с некоторыми трудностями. В частности, у меня не получилось обойтись без нового списка tree
, построение которого довольно затратно.
Вот я и хочу понять, можно ли как-то улучшить мой код, причём без преобразования объектов (комментариев) в словари с данными. От объектов я не хочу отказываться, чтобы не терять возможность применения их методов, таких, как get_absolute_url()
.