У меня есть иерархические данные, хранящиеся в хранилище данных с использованием модели, которая выглядит следующим образом:
class ToolCategories(db.Model):
name = db.StringProperty()
parentKey = db.SelfReferenceProperty(collection_name="parent_category")
...
...
Я хочу напечатать все имена категорий, сохраняя иерархию, скажем в такой форме, как это:
--Information Gathering
----OS Fingerprinting
----DNS
------dnstool
----Port Scanning
------windows
--------nmap
----DNS3
----wireless sniffers
------Windows
--------Kismet
Для выполнения вышесказанного я использовал простую рекурсию с возможностью обратной ссылки:
class GetAllCategories (webapp.RequestHandler) :
def RecurseList(self, object, breaks) :
output = breaks + object.name + "</br>"
for cat in object.parent_category:
output = output + self.RecurseList(cat, breaks + "--")
return output
def get (self) :
output = ""
allCategories = ToolCategories.all().filter(' parentKey = ', None)
for category in allCategories :
output = output + self.RecurseList(category, "--")
self.response.out.write(output)
Поскольку я очень новичок в программировании движка приложений (вряд ли 3 дня с тех пор, как я начал писать код), я не уверен, является ли это наиболее оптимизированным способом с точки зрения доступа к Datastore для выполнения желаемой работы.
Это лучший способ? если не то, что есть?