如何在没有数据库命中的情况下获取db.ReferenceProperty的键值?

Chr*_*org 1 python google-app-engine

有没有办法获取db.ReferenceProperty的键(或id)值,而不取消引用它指向的实际实体?我一直在挖 - 看起来密钥存储为属性名称前面带_,但我无法使任何代码工作.举例非常感谢.谢谢.

编辑:这是我尝试过的失败:

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return self._series
Run Code Online (Sandbox Code Playgroud)

在我的模板中:

<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a>
Run Code Online (Sandbox Code Playgroud)

结果:

<a href="games/view-series.html?series=#comm59">more</a>
Run Code Online (Sandbox Code Playgroud)

小智 13

实际上,您提倡访问ReferenceProperty的密钥的方式将来可能不存在.在python中以'_'开头的属性通常被接受为"受保护",因为与其实现紧密绑定并且与其实现密切相关的事物可以使用它们,但是随着实现更新的内容必须在更改时更改.

但是,通过公共接口有一种方法可以访问引用属性的密钥,以便将来安全.我将修改上面的例子:

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return Comment.series.get_value_for_datastore(self)
Run Code Online (Sandbox Code Playgroud)

当您通过与之关联的类访问属性时,您将获得属性对象本身,该对象具有可以获取基础值的公共方法.