我正在使用 NDB 和一个名为 MBObject 的 Expando 模型,因为我在没有固定方案的情况下动态创建对象。我从字典创建对象:
dic = {"groupName" : "my group",
"members" : [{"memberId" : "1"}, {"memberId" : "2"}]}
所以我想做的是创建一个组对象,它有一个名为 members 的属性,其中 members 是 MBObjects 的 LocalStructuredProperty。(所有对象都是 MBObject 的,ndb.Expando 的子类)
但是,似乎没有办法动态指定第二部分,并且出现错误:
def config_obj_from_dic(dictionary):
object = MBObject()
for key, value in dictionary.iteritems():
if isinstance(value, list):
objects = list()
for dic in value:
objects.append(config_obj_from_dic(dic))
value = objects
setattr(object, key, value)
return object
所以基本上我最终得到了一个成员列表,并尝试将其设置为对象的属性,并希望它自动意识到我想要一个重复的 LocalStructuredProperty。所以很明显我看到了问题所在,它不够聪明,无法自己处理。问题是,我将如何让它处理它?
如果它不能与 LocalStructuredProperty 一起使用,那么我也可以使用 ndb.JsonProperty,但它仍然是同一个问题:我如何动态地告诉它我希望它成为某种类型的属性?
tl;dr:如果我有一个 Expando 模型,并且我有setattr(object, key, a_list)
,我将一个属性设置为一个列表,我怎样才能让它知道我想要 aLocalStructuredProperty
或 a JsonProperty
,因为现在它不知道如何处理该列表.