Ich habe hierarchische Daten im Datenspeicher gespeichert und verwende ein Modell, das wie folgt aussieht:
class ToolCategories(db.Model):
name = db.StringProperty()
parentKey = db.SelfReferenceProperty(collection_name="parent_category")
...
...
Ich möchte alle Kategorienamen unter Beibehaltung der Hierarchie ausdrucken, z. B. in einer Form wie dieser:
--Information Gathering
----OS Fingerprinting
----DNS
------dnstool
----Port Scanning
------windows
--------nmap
----DNS3
----wireless sniffers
------Windows
--------Kismet
Um dies zu erreichen, habe ich eine einfache Rekursion mit Hilfe der Rückverweisungsfunktion verwendet:
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)
Da ich sehr neu in der App-Engine-Programmierung bin (kaum 3 Tage, seit ich mit dem Schreiben von Code begonnen habe), bin ich nicht sicher, ob dies der optimierte Weg vom Standpunkt des Datenspeicherzugriffs aus ist, um die gewünschte Aufgabe zu erledigen.
Ist dies der beste Weg? Wenn nicht, was dann?