Разместить ndb StructuredProperty _Message__decoded_fields
Я пытаюсь заполнить модель хранилища данных в GAE, которая содержит свойство ndb.Structured (), используя запрос POST.
Этот вопрос был задан недавно, но не ответил (Как «ПОСТ» ndb.StructuredProperty?)
У меня есть следующие две модели:
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)
После публикации от клиента я получаю следующееошибка:
AttributeError: 'Check' object has no attribute '_Message__decoded_fields'
Проблема:Из моего очень высокого уровня понимания модуля endpoints-proto-datastore кажется, что когда json декодируется и сохраняется во входящем сообщении (utils.py строка 431), он не проверяет структурированные / локально структурированные свойства и сохраняет их ключи как хорошо, что все в порядке, пока FromValue (строка ndb / model.py 115) не проверяет экземпляры структурированных свойств и не пытается рекурсивно преобразовать структурированное свойство из сообщения protorpc в объект модели (для которого требуется _Message__decoded_fields).
Sasxa (см. ссылку выше) нашел изящный маленький обходной путь для этой проблемы, используя EndpointsAliasProperty, преобразованный в класс сообщений ProtoRPC, чтобы обойти автоматическое преобразование endpoints-proto-datastore свойства structd в ассоциированную сущность модели, однако этот обходной путь имел некоторые побочные эффекты это затрудняло то, что я пытался сделать.
Вопрос:Кто-нибудь знает какправильно заполнить модель хранилища данных, содержащую StructuredProperty, используя запрос «POST», и есть ли рабочие примеры этого?