1

有没有办法在不取消引用它指向的实际实体的情况下获取 db.ReferenceProperty 的键(或 id)值?我一直在挖掘 - 看起来密钥存储为以 _ 开头的属性名称,但我无法让任何代码正常工作。例子将不胜感激。谢谢。

编辑:这是我没有成功的尝试:

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

    def series_id(self):
        return self._series

在我的模板中:

<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a>

结果:

<a href="games/view-series.html?series=#comm59">more</a>
4

2 回答 2

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)

当你通过它关联的类访问属性时,你会得到属性对象本身,它有一个可以获取底层值的公共方法。

于 2008-10-02T22:17:40.930 回答
1

您是对的 - 密钥存储为以“_”为前缀的属性名称。您应该能够直接在模型对象上访问它。你能证明你正在尝试什么吗?我过去使用过这种技术,没有任何问题。

编辑:您是否尝试过直接调用 series_id() 或直接在模板中引用 _series?如果您在此上下文中指定它们,我不确定 Django 是否会自动调用不带参数的方法。您也可以尝试将 @property 装饰器放在方法上。

于 2008-09-26T21:30:58.177 回答