0

是否可以將動態實體類型分配給Expando模型?例如,我想用這種模式對於許多類型的動態實體:帶動態類型的GAE NDB Expando模型

class Dynamic(ndb.Expando): 
    """ 
    Handles all "Post types", such as Pages, Posts, Users, Products, etc... 
    """ 
    col = ndb.StringProperty() 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

現在我用的是「山坳」 StringProperty持有類(如「頁面」,「文章」,等等)和查詢每次都是「col」。

閱讀文檔後,我偶然發現了這個@classmethod:

class MyModel(ndb.Model): 
    @classmethod 
    def _get_kind(cls): 
     return 'AnotherKind' 

這是否意味着我可以做到這一點?

class Dynamic(ndb.Expando): 
    """ 
    Handles all "Post types", such as Pages, Posts, Users, Products, etc... 
    """ 
    col = ndb.StringProperty() 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

    @classmethod 
    def _get_kind(cls): 
     return 'AnotherKind' 

但我該如何動態替換'AnotherKind'?我可以做點像return col嗎?

謝謝!

+0

我認爲(閱讀行之間),你應該仔細看看PolyModel。 –

回答

1

我不知道你是否可以這樣做,但這聽起來很危險,並且GAE更新可能會破壞你的代碼。

使用子類似乎是一個更安全的選擇。類似這樣的:

class Dynamic(ndb.Expando): 
    parent = ndb.IntegerProperty() 
    name = ndb.StringProperty() 
    slug = ndb.StringProperty() 

class Pages(Dynamic): 
    pass 

class Posts(Dynamic): 
    pass 

class Users(Dynamic): 
    pass 

您也可以嘗試使用PolyModel

我們需要了解更多關於您的應用程序以及您想要完成的更多具體建議。