我的问题:
我正在尝试使用“POST”请求填充 GAE 中包含 ndb.Structured Property() 的数据存储模型。
这个问题最近被问过但没有得到解答(如何“发布”ndb.StructuredProperty? https://stackoverflow.com/questions/35673294/how-to-post-ndb-structuredproperty/36240244#36240244)
我有以下两个模型:
class Check(EndpointsModel):
this = ndb.StringProperty()
that = ndb.StringProperty()
class CheckMessage(EndpointsModel):
check = ndb.StructuredProperty(Check)
我正在尝试发布此数据:
{
check:
{
"this":"test",
"that":"test"
}
}
具有以下 API 请求:
@CheckMessage.method(name='check_insert',path='check/insert',http_method='POST')
def check_insert(self,request):
print(request)
客户发帖后我收到以下信息error: http://pastebin.com/raw/SfvBNDyP
AttributeError: 'Check' object has no attribute '_Message__decoded_fields'
问题:
从我对端点原型数据存储模块的高度理解来看,当 json 被解码并保存到传入消息(utils.py 第 431 行)时,它似乎不会检查结构化/本地结构化属性并将其密钥保存为一切都很好,直到 FromValue (ndb/model.py 第 115 行)检查结构化属性的实例并尝试将结构化属性从 protorpc 消息递归地转换为模型实体(需要 _Message__decoded_fields)。
Sasxa(请参阅上面的链接)通过使用转换为 ProtoRPC 消息类的 EndpointsAliasProperty 来绕过端点原型数据存储将结构化属性自动转换为其关联的模型实体,找到了解决此问题的一个漂亮的小解决方法,但是此解决方法有一些副作用这让我想做的事变得困难。
问题:
有谁知道如何正确地使用“POST”请求填充包含 StructuredProperty 的数据存储模型,是否有任何可用的工作示例?