上下文
我有以下数据结构:
class Birthday(ndb.Model):
day = ndb.IntegerProperty()
month = ndb.IntegerProperty()
year = ndb.IntegerProperty()
class User(ndb.Model):
name = ndb.StringProperty()
birthday = ndb.StructuredProperty(Birthday)
# ... other properties
问题
当我尝试在User实例上使用 populate()方法时,它会出错:期望生日实例而不是params字典。
如果我删除了birthday属性,一切正常:用户实例填充了params字典。
populate()方法不应该识别结构化属性并自动填充它们吗?
任何线索?
由于
PS:populate方法也可以使用宽容模式,忽略未知属性,对于params字典有引用。
>>添加了评论
我正在使用通用REST处理程序,扩展以访问和更改多种数据类型。扩展必须定义一个方法getModel(),它返回要访问/操作的模型类。模型类必须实现一些方法,即create(cls,params)。
POST处理程序通过以下方式解析params(由AngularJS使用$ resouce发送 - 下面的链接):
# inside the generic REST Handler
params = json.loads(self.request.body, object_hook=self.datetime_decoder) # parse json params
...
self.getModel().create(params) # invokes the create method of the
模型类通过以下方式实现create方法:
@classmethod
def create(cls, params = None):
obj = cls()
if params:
obj.update(**params)
obj.put()
return True, obj
return False, None
JSON dict 的内容是:
{"name":"Ana Matos","email":"ana.matos@nvd.com","phone":"+35196983465671","birthday":{"day":1,"month":0,"year":1980},"gender":"FEMALE","groups":["2012/2013"],"serviceProviderId":206133}
答案 0 :(得分:1)
您是否报告错误或要求提供功能? populate()方法要求其参数类型与属性的声明类型匹配,在本例中是属于Birthday实例。
如果您显示要传递给populate()的JSON dict的内容(以及您传递它的确切方式),这将有所帮助。
可能解决方案就像从JSON dict获取'birthday'值并使用它来创建Birthday实例一样简单。但我必须看到你的代码才能确定。