【问题标题】:Retrieving key/ID values from app engine datastore?从应用引擎数据存储中检索键/ID 值?
【发布时间】:2011-06-19 23:37:53
【问题描述】:

我的 Python 应用程序上有一个页面,其中有一个与当前用户关联的位置下拉框,位置的名称作为下拉框的可见值。我想要做的是允许用户选择这些位置之一与他们当前的位置相关联。当用户添加新位置时,它被创建为该用户的子实体,因此我填充下拉框,如下所示:

locinfo = db.GqlQuery("SELECT * FROM Location WHERE ANCESTOR IS :1", userinfo)

...这就是我打算在网站上显示下拉框的方式(i.key 值只是一个占位符,我会解释)。

<select name="lockey">
    {% for i in locinfo %}
        <option value="{{i.key}}">{{i.locname}}</option>
    {% endfor %}
</select>

所以我想做的是在用户记录中添加对一个特定位置实体的引用。在普通的关系数据库中,我会获取每个位置的主键,将它们作为每个选项的值打印出来,并将它们存储在用户记录中作为对用户当前位置的引用。然而,我环顾四周,并没有发现任何关于检索密钥的信息,而且我环顾四周越多,我就越觉得自己走错了路。

有什么建议吗?

【问题讨论】:

    标签: python database google-app-engine google-cloud-datastore


    【解决方案1】:

    数据存储区中的键由对象表示,而不是简单的值(请参阅here

    对于数据存储中的任何实体,调用其.key() 方法以获取其密钥对象,然后您可以通过将其转换为字符串来获取可打印表示。

    您可以在视图代码中进行设置,以便为模板准备好数据,或者如果您希望能够在模板中调用 i.key,您可以在该模型类中创建一个只读属性.

    【讨论】:

    • webapp 中默认使用的 Django 模板对{{i.key}} 非常满意;这将调用i.key() 方法并返回字符串表示形式。
    • 嗯。怎么样 - 看起来我一直在做额外的工作。想知道 OP 的代码对他不起作用怎么办……
    • 这对我有用 - 问题出在我的代码中的其他地方。但是,我似乎无法将用户的当前位置保存在用户表中 - 我将“lockey”值发布到一个页面,该页面将其分配给用户的当前位置(这是一个 db.Key() 值)并且它没有不会出现在数据存储查看器中。当我尝试获取该值时,我收到一条错误消息,提示“密钥不完整”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多