Conversation
Проблема была решена благодаря внедрению глобальной карты (node_map) в методе _build_tree_data. Теперь, при повторном появлении узла, его поддерево извлекается из node_map, что позволяет корректно выводить потомков для всех родителей.
| self.show_complex = show_complex | ||
| complex_tz_names = ('Таблица', 'Тест') | ||
| self.complex_tz = Tz.objects.filter(name__in=complex_tz_names).values_list('pk', flat=True) | ||
| self.relations_info = {} # {(<parent_id>, <child_id>): {name: <str>, status: <str>, author: <int>}, } |
There was a problem hiding this comment.
Думаю комментарии лучше оставить. Так как на проекте бывают участники с разным уровнем подготовки, то с комментариями им будет легче понять как что работает и что хранится в ловарях
drevo/relations_tree.py
Outdated
| # Получаем детей по ярлыкам (через KnowledgeLabel) | ||
| qs_label = Znanie.published.filter( | ||
| knowledgelabel__parent_knowledge=knowledge | ||
| ) | ||
|
|
||
| # Объединяем оба QuerySet. При этом применяем distinct(), чтобы избежать дублей. | ||
| combined_qs = (qs_relation | qs_label).distinct() | ||
|
|
||
| # Если нужно задать порядок – можно, например, отсортировать по pk или другому полю. | ||
| # В связи с тем, что ярлыковые связи могут не иметь поля order, часто разумно выбрать универсальное упорядочивание. | ||
| return combined_qs.order_by('pk') |
There was a problem hiding this comment.
Объясни - для чего этот код? Выглядит как генерация нейросети. Вроде поля такого нет в модели. В рамках задачи этот код вообще используется?
There was a problem hiding this comment.
Извиняюсь, случайно в коммит этот код вставил. Пытался сначала через ярлыки сделать
There was a problem hiding this comment.
Тогда drevo/relations_tree.py надо убрать из pr. Может быть проще создать новый pr только с нужными изменениями?
| """ | ||
| Тег для построения дерева знаний \n | ||
| tree_num: номер дерева (на случай если необходимо на одной странице создать несколько деревьев); \n | ||
|
|
||
| show_searchbar: отображать поле поиска по дереву; \n | ||
|
|
||
| empty_tree_message: если дерево по какой либо причине нельзя построить, то будет выводиться сообщение указанное | ||
| в данном параметре; \n | ||
|
|
||
| show_only: принимает объект вида связи, если передан данный параметр, то будут отображаться только связи | ||
| данного вида для переданных знаний (используется если у одного знания из queryset есть несколько связей разных | ||
| видов и необходимо отобразить связи только определённого вида); \n | ||
|
|
||
| hidden_author: принимает объект автора, около знаний данного автора он не указывается; \n | ||
|
|
||
| show_complex: если данный параметр имеет значение True, то на дереве будут отображаться сложные знания. | ||
| В настоящее время для отображения на дереве существует 2 вида сложных знаний: "Таблица", "Тест" | ||
|
|
||
| edit_widgets: список виджетов для редактирования дерева. Допустимые значения: \n | ||
| create - создать новую ветвь (связь) | ||
| delete - удалить ветвь (связь) | ||
| update - удалить ветвь (связь) | ||
|
|
||
| empty_categories: если данный параметр имеет значение True, то на дереве будут отображаться категории, которые | ||
| не имеют знаний. | ||
|
|
||
| is_constructor_type: является ли данное дерево конструктором | ||
| """ |
There was a problem hiding this comment.
Предлагаю вернуть все комментарии и описания
| return Znanie.published.filter(related__bz=knowledge, | ||
| related__is_published=True | ||
| ).order_by('related__order') | ||
| else: |
There was a problem hiding this comment.
Тогда изменения drevo/relations_tree.py надо убрать из pr. Может быть проще создать новый pr только с нужными изменениями?
Исправлено объединение узлов с несколькими родителями. Проблема была решена благодаря внедрению глобальной карты (node_map) в методе _build_tree_data. Теперь, при повторном появлении узла, его поддерево извлекается из node_map, что позволяет корректно выводить потомков для всех родителей.