0

Я делаю бэкэнд, который будет подключаться к мобильному приложению, что позволяет пользователю загружать свое местоположение. У меня все работает, но я пытаюсь добавить функцию учетных записей, и я продолжаю получать следующую ошибку.Проблема с Google NDB с добавлением ключевого продукта

 File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 2011, in _validate 
raise datastore_errors.BadValueError('Expected Key, got %r' % (value,)) 
BadValueError: Expected Key, got 5733953138851840L 

Когда я запускаю следующую команду curl. Я знаю, что ключ учетной записи действителен, поскольку я только что создал его.

curl -X POST -H "Content-Type: application/json" -d '{"time":"Test Account", "longitude": 11.11, "lattitude": 22.22, "account": 5733953138851840}' http://localhost:14080/loc  

Идея заключается в том, что для каждого места я также может включать в себя ключ учетной записи, чтобы я мог подтянуть возвраты, которые имеют только определенный ключ учетной записи. вот мой класс DEFS

class Loc(ndb.Model): 
    time = ndb.StringProperty() 
    longitude = ndb.FloatProperty() 
    lattitude = ndb.FloatProperty() 
    account = ndb.KeyProperty(kind="Account") 


class Account(ndb.Model): 
    name = ndb.StringProperty() 
    password = ndb.StringProperty() 

Вот мой почтовый код.

def post(self): 
    uinput= self.request.body 
    r=uinput 
    j = json.loads(r) 
    time=j['time'] 
    longitude=j['longitude'] 
    lattitude=j['lattitude'] 
    account=j['account'] 
    if time: 
     new_loc = class_def.Loc() 
     new_loc.time=time 
     if longitude: 
      try: 
       new_loc.longitude= float(longitude) 
      except ValueError: 
       print("That's not an int!") 
     if lattitude: 
      try: 
       new_loc.lattitude= float(lattitude) 
      except ValueError: 
       print("That's not an int!") 
     if account: 
      new_loc.account=account 
     key = new_loc.put() 
     out= new_loc.to_dict() 
     self.response.write(json.dumps(out)) 

    else: 
     #self.response.status = 400 
     return 

ответ

1

Как ошибка говорит, он ожидает ключ при установке new_loc.account, но вы пытаетесь присвоить целое число. Вам нужен фактический ключ ndb.

new_loc.account = ndb.Key('Account', account) 

(И, пожалуйста, очистить свой код, прежде чем отправлять Там нет смысла проводки комментировал линий, а также объяснение, почему они прокомментировали,. Просто удалите их.)

+0

Большое спасибо. Это исправляло эту проблему, мне просто нужно выяснить, как получить ее, чтобы json сбросил ключ. – user3334886

Смежные вопросы