0

У меня есть две модели:объект не имеет атрибута _Message__decoded_fields

class Location(EndpointsModel): 
    geoLocation = ndb.GeoPtProperty() 
    street = ndb.StringProperty() 
    city = ndb.StringProperty() 
    state = ndb.StringProperty() 

class UserPost(EndpointsModel): 
    _message_fields_schema = ("entityKey", "title", "description", "category", "date", "time", "status", "locationOne") 
    category = ndb.IntegerProperty(indexed=True,validator=checkIfValidCategory) 
    title = ndb.StringProperty() 
    description = ndb.TextProperty() 
    date = ndb.DateProperty(indexed=True,auto_now_add=True) 
    time = ndb.IntegerProperty(indexed=True) 
    status = ndb.IntegerProperty(indexed=True,validator=checkIfValidStatusType) 
    locationOne = ndb.StructuredProperty(Location,indexed=False) 

Я пытаю вставку на UserPost с помощью следующего метода:

@UserPost.method(name='userPost.insert', path='userPost/insert', http_method='POST') 
def userPost_insert(self,r): 
    """ insert userPost """ 
    user = Auth.get_current_user(verified_email_required=True) 
    if user is None: 
     raise endpoints.UnauthorizedException('You must have a verified account before you can post') 
    if r.title is None: 
     raise endpoints.BadRequestException('Missing title') 
    i_post = r 
    i_post.put() 
    return i_post 

Это JSON приходит от клиента:

{ 
    "title":"asdf", 
    "details":"asdf", 
    "locationOne":{ 
     "state":"test", 
     "geoLocation":{ 
      "lon":0.127592, 
      "lat":51.503407051 
     }, 
     "city":"test", 
     "street":"test" 
    } 
} 

Это работает, если я вывела locationOne однако, когда я пытаюсь вставить с местоположением, я получаю e rror. Вот моя трассировка:

INFO  2016-03-25 17:08:52,389 module.py:787] default: "POST /_ah/spi/Auth.CurrentUser HTTP/1.1" 200 207 
INFO  2016-03-25 17:08:52,389 module.py:787] default: "GET /_ah/api/auth/v1.0/current_user HTTP/1.1" 200 224 
INFO  2016-03-25 17:09:01,631 module.py:787] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 200 95185 
ERROR 2016-03-25 17:09:01,644 service.py:191] Encountered unexpected error from ProtoRPC method implementation: AttributeError ('Location' object has no attribute '_Message__decoded_fields') 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/protorpc-1.0/protorpc/wsgi/service.py", line 181, in protorpc_service_app 
    response = method(instance, request) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/endpoints-1.0/endpoints/api_config.py", line 1331, in invoke_remote 
    return remote_method(service_instance, request) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/protorpc-1.0/protorpc/remote.py", line 414, in invoke_remote_method 
    response = method(service_instance, request) 
    File "/Users/buddydelaune/Dev/Apps/noble-py-proto/endpoints_proto_datastore/ndb/model.py", line 1408, in EntityToRequestMethod 
    request = cls.FromMessage(request) 
    File "/Users/buddydelaune/Dev/Apps/noble-py-proto/endpoints_proto_datastore/ndb/model.py", line 1232, in FromMessage 
    to_add = FromValue(value_property, value) 
    File "/Users/buddydelaune/Dev/Apps/noble-py-proto/endpoints_proto_datastore/ndb/model.py", line 139, in FromValue 
    return modelclass.FromMessage(value) 
    File "/Users/buddydelaune/Dev/Apps/noble-py-proto/endpoints_proto_datastore/ndb/model.py", line 1216, in FromMessage 
    if not field.name in message._Message__decoded_fields: 
AttributeError: 'Location' object has no attribute '_Message__decoded_fields' 

Любое понимание этого было бы весьма полезным. Спасибо заранее.

ответ

0

Извините, что я должен был ответить на этот вопрос раньше, но эта проблема исправлена. На самом деле это была ошибка с моделью end -s-proto-datastore, в которой входящий json не был правильно разобран и преобразован в свои соответствующие объекты хранилища данных. Я опубликовал лучшее описание этой проблемы here, и вы можете увидеть, что исправление реализовано here.

0

Я не знаком с EndpointsModel, но глядя на ваш код, я могу видеть, что модель Расположение не имеет вход для

_message_fields_schema 

как у вас есть для модели UserPost. Почему бы вам не попробовать поставить это и посмотреть, решит ли он проблему?