是否可以为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()
现在我使用“col”StringProperty
来保存Kind(如“Pages”,“Posts”等)并每次查询“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 :(得分: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
。
我们需要更多地了解您的应用程序以及您要完成的任务以提供更具体的建议。