'Return a list of all documents which are children
(grandchildren, great-grandchildren, etc.) of this one.'

def get_descendants(self, limit=None, levels=0):

    results = []
    if (((limit is None) or (levels < limit)) and self.children.exists()):
        for child in self.children.all().filter(locale=self.locale):
            results.append(child)
            [results.append(grandchild) for grandchild in child.get_descendants(limit, (levels + 1))]
    return results
