Пример #1
0
    def get_nodes_like_rows(self, filter, branch_id=None):
        """
        Возвращаются узлы дерева, предствленные в виде общего списка
        """
        # branch_id - это элемент ограничивающий дерево,
        # т.е. должны возвращаться только дочерние ему элементы
        if filter:
            filter_dict = utils.create_search_filter(
                filter, self.tree_filter_fields)
            if branch_id and hasattr(self.tree_model, 'get_descendants'):
                branch_node = self.tree_model.objects.get(id=branch_id)
                nodes = branch_node.get_descendants().filter(
                    filter_dict).select_related('parent')
            else:
                nodes = self.tree_model.objects.filter(
                    filter_dict).select_related('parent')
        else:
            if branch_id and hasattr(self.tree_model, 'get_descendants'):
                branch_node = self.tree_model.objects.get(id=branch_id)
                nodes = branch_node.get_descendants()
            else:
                nodes = self.tree_model.objects.all()

        # Для работы пейджинга нужно передавать общее количество записей
        total = len(nodes)
        result = {'rows': list(nodes), 'total': total}
        return result
Пример #2
0
    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
Пример #3
0
 def get_nodes_like_rows(self, request, context, filter, branch_id=None):
     """
     Возвращаются узлы дерева, предствленные в виде общего списка
     """
     # branch_id - это элемент ограничивающий дерево,
     # т.е. должны возвращаться только дочерние ему элементы
     if filter:
         filter_dict = utils.create_search_filter(filter,
                                                  self.tree_filter_fields)
         if branch_id and hasattr(self.tree_model, 'get_descendants'):
             branch_node = self.tree_model.objects.get(id=branch_id)
             nodes = branch_node.get_descendants().filter(
                 filter_dict).select_related('parent')
         else:
             nodes = self.tree_model.objects.filter(
                 filter_dict).select_related('parent')
     else:
         if branch_id and hasattr(self.tree_model, 'get_descendants'):
             branch_node = self.tree_model.objects.get(id=branch_id)
             nodes = branch_node.get_descendants()
         else:
             nodes = self.tree_model.objects.all()
     # кастомная функция модификации запроса
     # при реализации контестных справочников в большинстве случаев
     # достаточно будет просто переопределить данную функцию
     nodes = self.modify_get_nodes(nodes, request, context)
     # Для работы пейджинга нужно передавать общее количество записей
     total = len(nodes)
     result = {'rows': list(nodes), 'total': total}
     return result
Пример #4
0
 def get_nodes_like_rows(self, request, context, filter, branch_id=None):
     """
     Возвращаются узлы дерева, предствленные в виде общего списка
     """
     # branch_id - это элемент ограничивающий дерево,
     # т.е. должны возвращаться только дочерние ему элементы
     if filter:
         filter_dict = utils.create_search_filter(
             filter, self.tree_filter_fields)
         if branch_id and hasattr(self.tree_model, 'get_descendants'):
             branch_node = self.tree_model.objects.get(id=branch_id)
             nodes = branch_node.get_descendants().filter(
                 filter_dict).select_related('parent')
         else:
             nodes = self.tree_model.objects.filter(
                 filter_dict).select_related('parent')
     else:
         if branch_id and hasattr(self.tree_model, 'get_descendants'):
             branch_node = self.tree_model.objects.get(id=branch_id)
             nodes = branch_node.get_descendants()
         else:
             nodes = self.tree_model.objects.all()
     # кастомная функция модификации запроса
     # при реализации контестных справочников в большинстве случаев
     # достаточно будет просто переопределить данную функцию
     nodes = self.modify_get_nodes(nodes, request, context)
     # Для работы пейджинга нужно передавать общее количество записей
     total = len(nodes)
     result = {'rows': list(nodes), 'total': total}
     return result
Пример #5
0
    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
Пример #6
0
    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