添加keyproperty的Google NDB问题

时间:2016-02-29 20:06:55

标签: python google-app-engine google-cloud-datastore app-engine-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 个答案:

答案 0 :(得分:1)

就像错误所说的那样,当您设置new_loc.account时,它会期待一个键,但您尝试分配一个整数。您需要一个实际的ndb密钥。

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

(并且请在发布之前清理您的代码。没有必要发布评论行,并解释为什么他们会评论;只需删除它们。)