次のようなモデルを使用して、データストアに階層データを格納しています。
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)
私は App Engine プログラミングに非常に慣れていないため (コードを書き始めてからわずか 3 日)、これがデータストア アクセスの観点から最も最適化された方法で目的のジョブを実行できるかどうかはわかりません。
これが最善の方法ですか?そうでない場合は何ですか?