使用Appengine的NDB从实体的id获取密钥

raj*_*jpy 3 python google-app-engine app-engine-ndb google-cloud-datastore

我有一个基于ndb的模型,在保存它的同时,我使用当前登录用户的用户ID存储了'id'字段.(为什么我这样做?实际上这个模型过去基于db.Model而key_name有这个用户的id.现在,我将它转换为ndb)

m= Modelclass(id = str(users.get_current_user().used_id()),
      --- Other fields ---
m.put()
Run Code Online (Sandbox Code Playgroud)

这个模型的编辑表单发送了这个'id',我希望从中得到相应的'key'.但是,我得到"密钥ID号太长;收到'一些big_number'".试过两种方式

Modelclass.get_by_id(<id>).key 
Run Code Online (Sandbox Code Playgroud)

要么

ndb.Key('Modelclass', <id>)
Run Code Online (Sandbox Code Playgroud)

这是一种情况,可能存在用户可以在"id"字段中存储一些大数字的其他情况.在这些情况下,我们无法从"id"中提取密钥.那么,如何解决这样的问题.

我是ndb的新手.谢谢你的帮助.

Gui*_*sum 6

看起来你的值是一个int,而不是一个字符串.但是在创建权利时,您将其转换为字符串.有一个简单的解决方案:

ndb.Key('Modelclass', str(<id>))
Run Code Online (Sandbox Code Playgroud)

祝好运!