我使用NDB和一个名为mboobject的Expando模型,因为我动态地创建对象,没有固定的方案。我从字典创建对象:
dic = {"groupName" : "my group",
"members" : [{"memberId" : "1"}, {"memberId" : "2"}]}
所以我要做的是创建一个group对象,它有一个名为members的属性,其中members是mboobjects的LocalStructuredProperty。(所有对象都是MBObject的,子类ndb.Expando公司)在
但是,似乎没有一种方法可以动态地指定第二部分,我遇到了错误:
^{pr2}$所以基本上我得到了一个成员列表,并尝试将其设置为对象的属性,并希望它自动实现我想要一个重复的LocalStructuredProperty。所以很明显,我知道问题出在哪里了,它还不够聪明,不能独自处理。问题是,我该如何处理?在
如果它不能用于LocalStructuredProperty,那么我也可以使用ndb.JsonProperty公司,但问题仍然相同:如何动态地告诉它我希望它是某个类型的属性?在
tl;dr:如果我有一个Expando模型,setattr(object, key, a_list)
,在这里我将一个属性设置为一个列表,我如何让它知道我想要一个LocalStructuredProperty
或一个JsonProperty
,因为现在它不知道该如何处理该列表。在
此问题可能是由于:http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=216
修复将在appenginesdk的下一个版本中进行。看起来您应该先将Expando模型存储在Expando模型中(取自“问题”页面):
我将查看上面示例中
a.to_dict()
的结构,并验证dictionary对象与您自己的dictionary对象的比较。另外,我相信这将生成一个StructuredProperty,而不是LocalStructuredProperty。在如果可以预先定义属性类型,则此问题修复了一个类似的错误:http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=207
{data{datebko,只支持long-date,model^的类型。在
要解决这个问题:如果您知道
members
的所有属性和名称,那么您可以使用一个带有预定义属性的expando模型(在文档中描述)为LocalStructuredProperty
。但是,如果您不知道这一点(这是有意义的,因为您正在使用expando),那么最好的选择可能是手动将这些成员序列化为JSON,并将它们作为字符串保存在expando属性中。在相关问题 更多 >
编程相关推荐