def get_nodes(self, parent_id, filter, branch_id = None): """ Метод получения списка узлов дерева, которые """ # parent_id - это элемент, который раскрывается, # поэтому для него фильтр ставить не надо, иначе фильтруем # branch_id - это элемент ограничивающий дерево, # т.е. должны возвращаться только дочерние ему элементы if filter and not parent_id: filter_dict = utils.create_search_filter( filter, self.tree_filter_fields) nodes = utils.fetch_search_tree( self.tree_model, filter_dict, branch_id) else: if branch_id and hasattr(self.tree_model, 'get_descendants'): branch_node = self.tree_model.objects.get(id=branch_id) if parent_id: query = branch_node.get_descendants().filter( parent=parent_id) else: query = branch_node.get_children() else: query = self.tree_model.objects.filter(parent=parent_id) query = utils.apply_sort_order( query, self.tree_columns, self.tree_sort_order) nodes = list(query) # Если имеем дело с листом, нужно передавать параметр leaf = true for node in nodes: if not self.tree_model.objects.filter(parent=node.id).exists(): node.leaf = 'true' # генерируем сигнал о том, что узлы дерева подготовлены nodes_prepared.send(sender=self.__class__, nodes=nodes) return nodes
def get_nodes(self, request, context, parent_id, filter, branch_id=None): """ Метод получения списка узлов дерева, которые """ # parent_id - это элемент, который раскрывается, # поэтому для него фильтр ставить не надо, иначе фильтруем # branch_id - это элемент ограничивающий дерево, # т.е. должны возвращаться только дочерние ему элементы if filter and not parent_id: filter_dict = utils.create_search_filter(filter, self.tree_filter_fields) nodes = utils.fetch_search_tree(self.tree_model, filter_dict, branch_id) else: if branch_id and hasattr(self.tree_model, 'get_descendants'): branch_node = self.tree_model.objects.get(id=branch_id) if parent_id: query = branch_node.get_descendants().filter( parent=parent_id) else: query = branch_node.get_children() else: query = self.tree_model.objects.filter(parent=parent_id) query = utils.apply_sort_order(query, self.tree_columns, self.tree_sort_order) query = utils.detect_related_fields(query, self.list_columns) # кастомная функция модификации запроса # при реализации контестных справочников в большинстве случаев # достаточно будет просто переопределить данную функцию query = self.modify_get_nodes(query, request, context) nodes = list(query) # Если имеем дело с листом, нужно передавать параметр leaf = true for node in nodes: if not self.tree_model.objects.filter(parent=node.id).exists(): node.leaf = 'true' # генерируем сигнал о том, что узлы дерева подготовлены nodes_prepared.send(sender=self.__class__, nodes=nodes) return nodes
def get_nodes(self, request, context, parent_id, filter, branch_id=None): """ Метод получения списка узлов дерева, которые """ # parent_id - это элемент, который раскрывается, # поэтому для него фильтр ставить не надо, иначе фильтруем # branch_id - это элемент ограничивающий дерево, # т.е. должны возвращаться только дочерние ему элементы if filter and not parent_id: filter_dict = utils.create_search_filter( filter, self.tree_filter_fields) nodes = utils.fetch_search_tree( self.tree_model, filter_dict, branch_id) else: if branch_id and hasattr(self.tree_model, 'get_descendants'): branch_node = self.tree_model.objects.get(id=branch_id) if parent_id: query = branch_node.get_descendants().filter( parent=parent_id) else: query = branch_node.get_children() else: query = self.tree_model.objects.filter(parent=parent_id) query = utils.apply_sort_order( query, self.tree_columns, self.tree_sort_order) query = utils.detect_related_fields(query, self.list_columns) # кастомная функция модификации запроса # при реализации контестных справочников в большинстве случаев # достаточно будет просто переопределить данную функцию query = self.modify_get_nodes(query, request, context) nodes = list(query) # Если имеем дело с листом, нужно передавать параметр leaf = true for node in nodes: if not self.tree_model.objects.filter(parent=node.id).exists(): node.leaf = 'true' # генерируем сигнал о том, что узлы дерева подготовлены nodes_prepared.send(sender=self.__class__, nodes=nodes) return nodes