2013-07-26 57 views
1

給定一個db.Key實例,如:派生db.Model子從db.Key

db_key = db.Key.from_path('ModelKind', 'UniqueKeyName') 

有沒有辦法返回「ModelKind」的類爲代表的AppEngine能夠在內部做什麼?

喜歡的東西

db_key.class() 

最終的結果是,我需要動態檢索類(建立一個新的實體)給出的一個關鍵。我不知道提前實體類型(「ModelKind」可能是一種由我們的「模式」類(db.Model子類)表示的任何模型)

我想什麼來避免:

import schema_module 
cls = getattr(schema_module, 'ModelKind') 

,因爲它會限制'ModelKind'在特定的schema_module中定義。

回答

2

您可以通過db_key.kind()從密鑰實例中獲得值「ModelKind」。然後,你可以使用db.class_for_kind()來獲得相關的類本身。所以:

cls = db.class_for_kind(db_key.kind()) 
+0

只是爲那些誰遇到過這個問題,NDB增加,相當於是'ndb.Model._kind_map [ndb_key.kind()]' – Josh

+0

進一步的說明 - 確保你已經導入具有您正在尋找的類的模塊。這對於大型項目來說是重要的消息。我們構建了一個父模塊來導入所有ndb.Model子類,方便地命名爲'import models'。希望這可以幫助別人! – Josh