语境
我有以下数据结构:
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()方法时,它给出了一个错误:期望一个生日实例而不是参数字典。
如果我删除生日属性,一切正常:用户实例填充了参数字典。
populate() 方法不应该识别结构化属性并自动填充它们吗?
有什么线索吗?
谢谢
PS:populate 方法也可以使用宽容模式,在这种模式下它会忽略在 params 字典中有引用的未知属性。
>>添加评论
我正在使用一个通用的 REST 处理程序,它被扩展用于访问和更改几种数据类型。扩展必须定义一个方法 getModel() 来返回模型类以访问/操作。模型类必须实现一些方法,即 create(cls, params)。
POST 处理程序通过以下方式解析参数(由 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}