Returns a :class:`QuerySet` with all descendants for a given
            :class:`CTENode` `node`.

            :param node: the :class:`CTENode` whose descendants are required.

            :returns: A :class:`QuerySet` with all descendants of the given
                `node`.

def descendants(self, node):
        """ Returns a :class:`QuerySet` with all descendants for a given
            :class:`CTENode` `node`.

            :param node: the :class:`CTENode` whose descendants are required.

            :returns: A :class:`QuerySet` with all descendants of the given
                `node`.
        """
        # We need to read the _cte_node_* attributes, so ensure they exist.
        self._ensure_parameters()
        # This is implemented in the CTE WHERE logic, so we pass a reference to
        # the offset CTENode to the custom QuerySet, which will process it.
        # Because the compiler will include the node in question in the offset,
        # we must exclude it here.
        return CTEQuerySet(self.model, using=self._db, offset=node).exclude(pk=node.pk)